我有一些 ASP.NET Web 服务,它们都共享一个公共帮助器类,它们只需要实例化每个服务器的一个实例。它用于简单的数据转换,但在启动期间会花费一些时间从 web.config 文件等加载内容。帮助类是 100% 线程安全的。将其视为一个简单的实用程序调用库。我会在类上共享所有方法,但我想从 web.config 加载初始配置。我们已将 Web 服务部署到 IIS 6.0 并使用应用程序池,其中包含 15 个工作人员的 Web Garden。
我在 Global.asax 中将帮助类声明为 Private Shared 变量,并添加了一个惰性加载 Shared ReadOnly 属性,如下所示:
Private Shared _helper As MyHelperClass
Public Shared ReadOnly Property Helper() As MyHelperClass
Get
If _helper Is Nothing Then
_helper = New MyHelperClass()
End If
Return _helper
End Get
End Property
我在构造函数中记录了代码MyHelperClass()
,它显示了为每个请求运行的构造函数,即使在同一个线程上也是如此。我确定我只是缺少 ASP.NET 的一些关键细节,但 MSDN 并没有太大帮助。
我已经尝试使用两者来做类似的事情Application("Helper")
,Cache("Helper")
并且我仍然看到构造函数随每个请求一起运行。