2010-03-24 61 views
1

我正在考慮將DataContext 作爲成員變量添加到我的aspx.cs代碼隱藏類中以執行LinqToSql查詢。aspx.cs代碼中的ASP.NET線程安全文件

此線程安全嗎?我不確定是否爲每個HTTP請求創建了此代碼隱藏類的新實例,或者實例是否在所有請求線程之間共享?

我的恐懼是我將得到10個併發的併發http請求,這些請求將使用同一個數據庫會話。

 
public partial class MyPage : System.Web.UI.Page 
{ 
    private DataContext myDB = new DataContext(); 

    protected void MyAction_Click(object sender, EventArgs e) 
    { 
     myDB.DoWork(); 
    } 
} 
+0

它有助於記住MyPage類在每個請求上得到實例化,MyPage的每個新實例都有自己的私有DataContext變量副本。 – Juliet 2010-03-24 18:04:12

回答

4

MSDN的DataContext對象線程安全是這樣解釋的:

任何公共靜態此類型的成員(在Visual Basic中的Shared)都是線程安全的。任何實例成員不保證是線程安全的。

由於您使用私人會員,您必須考慮您在課堂上的使用。只要你沒有啓動後臺線程並與你分享實例,應該沒有什麼可擔心的。

DataContext應該被視爲資源,您可能想要考慮將它作爲類生命週期的一部分進行顯式處理。它是一種重量輕,足夠的對象來考慮投入使用塊每個操作過,這取決於你使用..看到MSDN description

一個DataContext實例設計壽命爲一個「工作單位」,然而你的應用程序定義了這個詞DataContext是輕量級的,創建起來並不昂貴。典型的LINQ to SQL應用程序在方法範圍創建DataContext實例,或者作爲表示相關數據庫操作的邏輯集合的短期類的成員。

+0

優秀的答案!我在其他問題上看到了你的答案,並認爲你是一個聰明的自然怪物。感謝您花時間回答我的問題。 – 2010-03-24 18:03:34

+0

哇!謝謝,代言檢查在郵件中。 – 2010-03-24 18:23:15

1

因爲每次你的頁面加載的MyPage一個新的實例被創建,因此你DataContext的新實例也創建它的安全。

沒有線程安全問題需要擔心。