ASP.NET静态变量在我停止应用程序时保留!

ASP.NET静态变量在我停止应用程序时保留!,asp.net,static,Asp.net,Static,我的应用程序中有一些静态类。 当我运行应用程序时,停止调试并重新启动,我注意到这些变量保留在内存中! 因此,当应用程序终止时,它们会被留下并重新连接到应用程序的下一个实例。 正如你所期望的那样,这会产生非常疯狂的结果 当应用程序终止时,您能通过编程告诉静态变量销毁自身吗 只要包含静态变量的AppDomain保持活动状态,静态变量就会保持活动状态。如果您看到它们在调试会话之间持续存在,这意味着当您停止调试时,应用程序不会停止运行——两次都是同一个实例。尝试重新启动web服务器 我想补充一点,如果静

我的应用程序中有一些静态类。 当我运行应用程序时,停止调试并重新启动,我注意到这些变量保留在内存中! 因此,当应用程序终止时,它们会被留下并重新连接到应用程序的下一个实例。 正如你所期望的那样,这会产生非常疯狂的结果


当应用程序终止时,您能通过编程告诉静态变量销毁自身吗

只要包含静态变量的AppDomain保持活动状态,静态变量就会保持活动状态。如果您看到它们在调试会话之间持续存在,这意味着当您停止调试时,应用程序不会停止运行——两次都是同一个实例。尝试重新启动web服务器


我想补充一点,如果静态变量倾向于持久化这一事实导致了疯狂的结果,那么您可能没有正确使用它们,并且可能根本不应该使用静态变量。

停止调试器不会停止IIS或Cassini

如果您使用的是Cassini,则需要从命令栏显式停止它,以便使其循环使用

否则,您可以尝试修改web.config以强制回收


我曾经在Connect上对此提出了一个bug;微软说这是设计出来的。

这难道不会使静态变量在ASP.NET中完全无用吗?我的意思是,谁会仅仅因为web服务器在代码中使用了static这个词就编写代码来启动/停止web服务器?这取决于您使用它们的目的。它们可能很有用,但会使测试变得困难,如果它们不是只读变量,则需要手动管理锁定等,以避免在负载下崩溃。您最好将值存储在应用程序状态:application[foo]=value;应用程序对象只是另一个静态变量。它碰巧也有一些方法来管理锁定,但它的行为基本上与其他静态变量没有任何区别?你会向OP建议手动锁管理吗?我特别提到了应用程序状态,因为它为您管理锁定,而OP似乎想要共享状态。