前几天我才想知道这件事。我不确定ASPX如何管理垃圾处理,但据我所知,“完成加载”不会删除静态内存值或页面重新加载后。静态至少在C方面意味着内存分配遵循程序,直到程序本身关闭。在ASPX中这是一样的吗?如果我有一个静态值并且我从页面A转到页面B,那么静态值是否仍然存在于RAM中,直到它们离开应用程序或者当我不再在页面A上时该值被删除? (转到另一个网站,从服务器中的应用程序池中删除它们的实例)。
根据我的经验:
public static class foo
{
public static int x;
}
protected void Page_Load(object sender, EventArgs e)
{
foo.x++; //This will continue to increment from the last value before reload
}
答案 0 :(得分:5)
ASP.NET中应避免使用静态类。它们保留在内存中,直到应用程序重新启动并受到许多并发错误和竞争条件的影响。
关闭用户会话(浏览器会话)不会重启应用程序!即使用户离开并回来,他们也会留在记忆中。所以真的要避免静态类!
答案 1 :(得分:0)
这是您的标准CLR执行模型,它与asp.net没有什么不同。静态对象被认为是应用程序的根,而不是垃圾回收。
这是一篇关于垃圾收集如何在.net中运作的旧文章,但我认为所有原则仍然相同:http://msdn.microsoft.com/en-us/magazine/bb985010.aspx