aspx.cs 代码隐藏文件中的 ASP.NET 线程安全
我正在考虑将 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(); } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
DataContext 对象 MSDN是这样解释的:
由于您使用私有成员,因此您必须考虑在课堂上的使用。只要您不启动后台线程并与您共享实例,就无需担心。
DataContext 应被视为资源,您可能需要考虑将其显式处置为类生命周期的一部分。它是一个足够轻量级的对象,可以考虑为每个操作添加一个 using 块,具体取决于您的使用情况。请参阅 MSDN 说明:
The DataContext objects Thread Safety on MSDN is explained like this:
Since your using a private member you have to consider your use in the class. As long as your not launching background threads and sharing the instance with you should have nothing to worry about.
The DataContext should be treated as resource and you may want to consider explicitly disposing of it as part of your class lifecycle. Its a light-weight enough object to consider putting in a using block for every operation too, depending on your use.. see the MSDN description:
它是安全的,因为每次加载页面时都会创建一个新的
MyPage
实例,因此也会创建一个新的DataContext
实例。无需担心线程安全问题。
It's safe because each time your page is loaded a new instance of
MyPage
is created, thus a new instance of yourDataContext
is also created.There's no thread safety issue to worry about.