请considerer以下情形:ASP .NET应用程序生命周期+ Singleton实例寿命
- 我已经使用ASP .NET MVC 3框架创建一个完整的Web应用程序。现在我的应用程序由一个Web服务器管理。
- 在我的应用程序的服务器端收到HTTP请求。
- 实现单例设计模式的类在服务器端实例化。
- 响应被发送到浏览器。
- 在我的应用程序的服务器端收到另一个HTTP请求。步骤2中使用的单例实例在服务器端仍然可用吗?
我读到一个ASP .NET应用程序的此页面上的生命周期中的一些信息:http://msdn.microsoft.com/en-us/library/ms178473.aspx
但是,我还是没能回答我的问题。
预先感谢您的帮助,未来
我刚才VS2010下做了一些测试。
这里是我的项目的主要组成部分的清单:
- 含指数HTTPGET操作方法的Home控制器。
- 由Index操作方法产生的视图。
- 实现单例设计模式的SingletonTest类。
这里是SingletonTest类的代码:
public class SingletonTest
{
private int counter;
private static SingletonTest instance = null;
public int Counter
{
get
{
return counter;
}
}
public static SingletonTest Instance
{
get
{
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
private SingletonTest()
{
counter = 0;
}
public void IncrementCounter()
{
counter++;
}
}
这里是Index操作方法的代码:
public ActionResult Index()
{
SingletonTest st = SingletonTest.Instance;
st.IncrementCounter();
return View();
}
这里是视图的代码:
@SingletonTest.Instance.Counter
这里我遵循的测试场景是:
- IIS服务器已由VS2010自动启动。
- 我已经请求/ Home/Index/URL,然后显示值1。
- 我已经请求了/ Home/Index/URL,然后显示了值2。
- ...
该测试表明,在处理下一个请求时,在步骤1中所做的SingletonTest实例可用。 我想内存空间分配给我的Web服务器上的应用程序。
然后我停止了IIS服务器,并且我再次跟踪了我的测试场景。 我得到了和以前一样的结果:1,2,...
测试它创建同一应用程序的多个实例。创建一个内部递增的单例,并在每次调用时返回一个值。如果您持续获得相同的价值,那么不会持续请求。 – Oded 2012-01-11 14:59:17