.NET中的Singleton在所有会话中共享?

时间:2011-06-03 18:24:53

标签: c# .net asp.net singleton

我正在创建一个单例来保存linqtoumbraco datacontext,它从缓存的xml文件中提取数据。

我理解如何创建单例类并使用锁来防止新线程创建新实例。

我不了解多线程以及.NET会话如何工作得太好并想知道我是否如上所述创建单例,是否会在应用程序池保持活动状态时点击我的Web应用程序的所有用户共享?换句话说,单例不仅仅是一个用户会话的单例,它适用于所有会话吗?

由于

3 个答案:

答案 0 :(得分:5)

是的,静态成员是为整个ASP.Net应用程序共享的

另一种方法是在HttpContext.Current.Application中创建和分配datacontext,你可以在任何会话中的任何地方获取它

但是考虑一下,所有客户端只能从xml文件中读取吗?如果一个客户在另一个写作时正在阅读怎么办?或者datacontext是否支持多线程读取? 在以静态方式使用datacontext之前,您应该回答所有这些问题

答案 1 :(得分:0)

如果将它存储在普通静态字段中,则为是,它将被共享。您可以在字段上放置[ThreadStatic]属性以将其绑定到当前线程。请记住,线程可以重复使用,因此当您完成它时,您将要删除该字段。

答案 2 :(得分:0)

只要服务器实例处于活动状态,您的单例将在整个应用程序中共享,就像您在服务器启动时在global.asax上初始化的内容