重复创建Linq到SQL DataContext对象的性能损失

时间:2011-12-13 20:38:21

标签: linq-to-sql

我们说我有以下代码:

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 :(得分:0)

你应该考虑这个提示:

1)您的连接将一直处于打开状态,直到bar1bar2完成。

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 
        } 
    } 
} 

我希望这个帮助