2011-12-13 55 views
3

比方說,我有以下代碼:性能損失重複創建LINQ到SQL的DataContext對象

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

你應該沒問題,創建DataContext並不昂貴。 – Magnus 2011-12-13 20:43:36

回答

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

我希望這幫助