我正在考虑将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(); } }
答案 0 :(得分:4)
DataContext 对象MSDN上的线程安全性解释如下:
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。任何实例成员都不保证是线程安全的。
由于您使用私人会员,您必须考虑在课堂上使用。只要您不启动后台线程并与您共享实例就应该无需担心。
应将DataContext视为资源,您可能需要考虑将其明确地作为类生命周期的一部分进行处理。它的重量足够轻,可以根据您的使用情况考虑为每个操作添加一个使用块。请参阅MSDN description:
DataContext实例旨在持续一个“工作单元”,但是您的应用程序定义该术语。 DataContext是轻量级的,创建起来并不昂贵。典型的LINQ to SQL应用程序在方法范围内创建DataContext实例,或者作为表示相关数据库操作的逻辑集的短期类的成员。
答案 1 :(得分:1)
这是安全的,因为每次加载页面时都会创建一个MyPage
的新实例,因此还会创建DataContext
的新实例。
无需担心线程安全问题。