2016-01-18 2 views
1

Этот вопрос выглядит в основном, чтобы быть в состоянии понять поведение бритвой в этом случае:Создает ли бритву несколько экземпляров объекта с зацикленным частичным представлением?

Скажем, у меня есть этот вид под названием 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 I имеют следующее:

@model String 

    @{ GreetingGetter Greet = new GreetingGetter(); } 

    <div>@Greet.foo(Model)</div> 

Как распределить ресурсы в таком случае, как этот? Я считаю, что это будет выделять новый GreetingGetter с каждой итерацией, но я не особо этого хочу, особенно потому, что объект в сценарии реальной жизни может быть достаточно тяжелым, чтобы снизить производительность с таким количеством бессмысленных распределений.

Как бритва лечить это под капотом? Будет ли он ссылаться на код внутри «@ {...}» каждый раз внутри цикла foreach? Есть ли способ без изменения модели повышения эффективности этой операции?

Thanks,

ответ

1

Да, новый экземпляр будет создан каждый раз.

Вы можете сделать GreetingGetter статическим, но это может открыть другие проблемы в зависимости от того, что вы делаете с ним.

+0

Спасибо, в моем случае мне придется использовать ViewData для этого, так как я не могу сделать его статическим, но я хотел избежать этого, если бы был шанс. –

Смежные вопросы