Потеря производительности при многократном создании объектов Linq to SQL DataContext - PullRequest
3 голосов
/ 14 декабря 2011

Допустим, у меня есть следующий код:

class foo
{
    public void bar()
    {
       bar1();
       bar2();
    }

    private void bar1()
    {
        using (var dataContext = new SomeDataContext())
        {
            //do some query
        }
    }

    private void bar2()
    {
        using (var dataContext = new SomeDataContext())
        {
            //do some query
        }
    }
}

Во имя исполнения я должен рассмотреть:

class foo
{
    public void bar()
    {
        using (var dataContext = new SomeDataContext())
        {
            bar1(dataContext);
            bar2(dataContext);
        }
    }

    private void bar1(SomeDataContext dataContext)
    {         
    }

    //similar for bar2
}

1 Ответ

0 голосов
/ 27 апреля 2012

вам следует учесть следующие советы:

1) ваше соединение будет открыто до тех пор, пока не завершатся bar1 и bar2.

2) если произойдет исключение в bar1из-за того, что ваше соединение закрыто, вы должны открыть его в bar2.по крайней мере, вам нужен оператор if, который проверяет состояние соединения.

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

Если я хочу написать код для сценария, подобного вашему коду, я создаю экземпляр в каждом методе (поскольку у меня нет связи с этими двумя методами), нокак это:

class foo 
{ 
 var dataContext ;
public void bar() 
{ 
   bar1(); 
   bar2(); 
} 

private void bar1() 
{ 
    using (dataContext = new SomeDataContext()) 
    { 
        //do some query 
    } 
} 

    private void bar2() 
    { 
        using (dataContext = new SomeDataContext()) 
        { 
            //do some query 
        } 
    } 
} 

Я надеюсь, что эта помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...