C# ASP.NET中的静态对象是否浪费内存?

C# ASP.NET中的静态对象是否浪费内存?,c#,asp.net,memory-management,C#,Asp.net,Memory Management,前几天我在想这个。我不太清楚ASPX是如何管理垃圾处理的,但据我所知,“已完成加载”不会删除静态内存值,也不会在页面重新加载后删除。至少在C语言中,静态意味着内存分配遵循程序,直到程序本身关闭。在ASPX中也是这样吗?如果我有一个静态值,并且我从a页转到B页,那么这个静态值在RAM中仍然保持不变,直到它们离开应用程序,还是在我不再在a页时该值被删除?(转到其他网站,从服务器中的应用程序池中删除其实例) 根据我的经验: public static class foo { pub

前几天我在想这个。我不太清楚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
  }

这是您的标准CLR执行模型,对于asp.net来说没有什么不同。静态对象被认为是应用程序的根,不会被垃圾收集


这是一篇关于.net中垃圾收集工作原理的老文章,但我认为所有原则都是一样的:

在ASP.net中应该避免使用静态类。它们会一直保留在内存中,直到应用程序重新启动,并且会受到许多并发错误和争用条件的影响


关闭用户会话(浏览器会话)不会重新启动应用程序!即使用户离开或回来,它们也会留在内存中。所以真的要避免静态类

您是否有一篇文章或参考资料涉及到这一主题?我想了解更多关于它的信息。看看你可以在你的问题评论中找到的链接。你也可以看看这里,这里StackOverFlow也有很多帖子。请注意,如果你真的需要在整个应用程序之间共享信息,有时你可能需要使用静态变量。但在这种情况下,我宁愿使用单例。有没有办法告诉ASP.NET终止与该会话相关的任何静态内存分配?您唯一可以做的就是将变量设置为null。但这将为所有会话(而不仅仅是一个会话)使用垃圾收集器取消分配。您知道,对于静态变量,所有会话都使用相同的对象。