0

我正在使用 redgate 内存分析器来查找内存泄漏。但是这个软件只显示系统类。我想找到产生问题的页面,请帮助

4

1 回答 1

1

在分析 ASP.NET 网站时,您会看到很多系统类,因为 IIS 在幕后做了很多工作,但 ANTS 内存分析器当然不限于只显示系统类。

您拥有源代码的类在类列表中以粗体突出显示,您还可以使用过滤来仅显示您拥有源代码的类。如果您没有源代码,但仍想突出显示特定命名空间中的类(例如,在您的情况下,任何不在系统中的类),您可以通过选择Group by namespace来做到这一点。

类列表仅显示具有源的类

ANTS 向您显示在拍摄内存快照时保存在内存中的对象。如果类列表显示你的类都不存在于内存中,那是因为它们在那个时间点不存在。

您没有提供任何信息,因此很难在您的具体情况下提供太多指导,但总的来说:

  • 你真的有记忆问题吗?在使用应用程序时,使用 ANTS 时间轴上的性能计数器查看内存使用情况。如果它没有上升,也许你没有问题。

  • 确保您在正确的时间拍摄快照。这是最难做对的事情之一。首先,您需要确保站点已正确“预热”。如果您查看站点上第一个页面点击的行为,您将不会查看正常的应用程序行为,因为设置连接的一次性开销、未使用的缓存等。一旦站点升温起来,拍摄基线快照。接下来,以您预期可能会导致问题的方式使用该应用程序,然后拍摄另一个快照。ANTS 比较两个快照之间的内存使用情况,特别是向您显示哪些类在快照之间使用更多内存。然后重复您的操作(以相同的方式使用您的网站,然后拍摄另一个快照),并寻找类似的增加。

  • 找出增加的原因。一旦您确定了某些似乎是问题的东西,请使用实例保留图来了解导致该对象保留在内存中的引用链。

诊断 ASP.NET 内存泄漏的一个常见问题是仅泄漏非常少量的内存但经常泄漏,例如在每次页面加载时。一个站点在开发环境中可能看起来不错,但在生产环境中负载失败。一个有用的启动方法是使用负载生成工具(您可以从 IIS6 附带的免费 tinyget 工具开始,或者使用更复杂的负载测试(如果有)),并在这些条件下分析应用程序的性能. 生产中的分析是一种风险措施,只能作为绝对的最后手段进行。

于 2013-08-29T11:36:52.210 回答