razor 是否使用循环分部视图创建对象的多个实例

本文关键字:创建对象 实例 视图 是否 循环 razor | 更新日期: 2023-09-27 18:30:46

这个问题看起来主要是为了能够理解在这种情况下剃刀的行为:

假设我有一个名为HelloWorld.cshtml的视图:

    @model List<String>        
    <div>Hello world</div>
    <h2>Greetings from the whole world!</h2>
    @foreach(String i in Model)
    {
        @Html.Partial("GetGreeting", i)
    }

在部分视图中 GetGreeting.cshtml 我有以下内容:

   @model String
   @{ GreetingGetter Greet = new GreetingGetter(); }
   <div>@Greet.foo(Model)</div>

在这种情况下,资源分配将如何工作?我相信这会在每次迭代时分配一个新的 GreetingGetter,但我并不特别希望这样,尤其是因为现实生活中的对象可能足够重,以至于通过如此多的无意义的分配来降低性能。

剃须刀如何在引擎盖下处理这个问题?它会在每次在 foreach 循环中调用"@{ ...}"中的代码吗?有没有办法在不改变使此操作更有效的模型的情况下?

谢谢

razor 是否使用循环分部视图创建对象的多个实例

是的,每次都会创建一个新实例。

你可以把GreetingGetter设为静态的,但这可能会打开其他问题,这取决于你用它做什么。