代码之家  ›  专栏  ›  技术社区  ›  webnoob

使用大量内存的ASP.NET应用程序-泄漏?

  •  4
  • webnoob  · 技术社区  · 16 年前

    我有一个ASP.NET网站,似乎使用了大量内存。星期天我把它放了7个小时,它达到了3.2GB。我认为.NET处理了所有它自己的垃圾收集/空闲对象等,所以我不确定从哪里开始寻找解决方案。

    该网站大量使用XML,因此我认为这可能是问题所在,但我已经实现了对XML序列化程序的全局使用,以尝试将其排除在外。

    我还有一个自定义的处理程序,它可以处理所有图像、调整大小、缓存,然后在缓存中加载。这会引起什么问题吗?

    很抱歉这么含糊,但问题是我真的不知道从哪里开始这个问题。感谢您的帮助。

    服务器信息: .NET 2 Windows 2008服务器 iIS7

    事先谢谢。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Coxy    16 年前

    最好从使用分析器开始。Redgate有一个非常好的蚂蚁内存分析器,并且有一个免费的测试。 Product page here.

    运行应用程序,附加分析器,然后正常使用页面。探查器收集有关正在使用的对象的信息,这将允许您查明问题的根本原因。

    在我的应用程序中,结果发现我们不小心为执行的每个查询创建了一个nhibernate会话工厂。这些都是由NHibernate内部引用的,这意味着它们除了速度非常慢和效率低下之外,从未被释放过。探查器直接引导我们找到它,否则我们永远也找不到它。

        2
  •  2
  •   Arthur    16 年前

    Redgate的另一种选择是使用ADplus和windbg。同时阅读此博客:

    http://blogs.msdn.com/tess/

    这是调试问题的一个很好的帮助来源。

    我和我的系统管理员成功地使用了ADPLUS和windbg来查找ASP.NET应用程序中的内存泄漏。我的开发人员错误的是,他们不小心使用了ASP.NET的缓存,但没有超时。

    另一个错误是,开发人员使用了带有xmlserialization的属性重载。有了这个功能.NET将 巡回审判 创建新的序列化程序帮助程序(无论什么)程序集。无法卸载程序集,因此应用程序占用大量内存

        3
  •  1
  •   Carl Bergquist    16 年前

    处理文件系统时,处理读卡器和临时对象非常重要。

        4
  •  1
  •   Carrick    15 年前

    你说你经常使用xmlserializer。如果不使用默认构造函数xmlserializer(type)和xmlserializer(type,defaultnamespace),则会导致内存泄漏。

    见 this MSDN article 更多信息

    推荐文章