0

В роли рабочего агента Azure используется следующий шаблон для удаления объекта contexttext. Кроме того, использование любого из этих шаблонов влияет на объединение пулов по-другому?Предпочтительный шаблон для размещения контекста объекта

public override void Run() 
{  
    DatabaseObjectContext ctx = new DatabaseObjectContext()     
    while (condition) 
    { 
     ctx.Dosomething(); 
    } 
    ctx.Dispose(); 
} 

против

public override void Run() 
{       
    while (condition) 
    { 
     DatabaseObjectContext ctx = new DatabaseObjectContext() 
     ctx.Dosomething(); 
      ctx.Dispose(); 
    } 
    } 

ответ

2

ObjectContext не предназначен, чтобы быть долговечным объектом. Рассмотрите это скорее как реализацию шаблона Единицы работы. Таким образом, второй вариант, вероятно, лучше.

1

Если бы мне пришлось выбирать между двумя (т.е. я не могу или слишком сложно реализовать, так как Barlomieij сказал образец UoW), я бы выбрал первый, удалив ctx.Dispose() в конце и заменив его путем обертывания всего в оператор using.

+0

Просто уточнить. Если вы выберете первое условие while, оно все равно будет находиться в пределах используемой инструкции. Настолько эффективно, что одно создание datacontext правильно? – user529265

+0

Нет, .NET создаст один datacontext для каждого цикла. Обертка внутри использования позволит вам рассказать структуре, что контекст является одноразовым, но это ответчик сборщика мусора, чтобы уничтожить эти контексты (т. Е. В какой-то момент, в памяти вы могли бы иметь все созданные контексты объекта, все ожидающие сбора мусора) – Marconline

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

  • Нет связанных вопросов^_^