aspx.cs代码隐藏文件中的ASP.NET Thread Safety

时间:2010-03-24 17:36:50

标签: asp.net datacontext code-behind

我正在考虑将DataContext 作为成员变量添加到我的aspx.cs代码隐藏类中,以执行LinqToSql查询。

这个线程安全吗?我不确定是否为每个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();
    }
} 

2 个答案:

答案 0 :(得分:4)

DataContext 对象MSDN上的线程安全性解释如下:

  

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。任何实例成员都不保证是线程安全的。

由于您使用私人会员,您必须考虑在课堂上使用。只要您不启动后台线程并与您共享实例就应该无需担心。

应将DataContext视为资源,您可能需要考虑将其明确地作为类生命周期的一部分进行处理。它的重量足够轻,可以根据您的使用情况考虑为每个操作添加一个使用块。请参阅MSDN description

  

DataContext实例旨在持续一个“工作单元”,但是您的应用程序定义该术语。 DataContext是轻量级的,创建起来并不昂贵。典型的LINQ to SQL应用程序在方法范围内创建DataContext实例,或者作为表示相关数据库操作的逻辑集的短期类的成员。

答案 1 :(得分:1)

这是安全的,因为每次加载页面时都会创建一个MyPage的新实例,因此还会创建DataContext的新实例。

无需担心线程安全问题。