Visual Studio 2013 中的.NET 内存剖析工具

  • Jonathan Allen
  • 臧秀涛

2013 年 6 月 24 日

话题:语言 & 开发

认为.NET 开发者不需要担心内存管理问题,这是一个常见的误解。尽管内存的处理的确是更简单了,但是开发者仍然会陷入困境。

在使用.NET 编程时,有三个最常见的错误:

  • 内存泄露,通常是委托或事件处理程序没有正确释放。
  • 内存使用非常低效,主要是持有的内存比实际需要的多。
  • 不必要的内存分配,这个问题非常微妙,可能会随着时间的推移越来越严重。

在 Andrew B Hall 所做的预览中,Visual Studio 2013 可以捕捉以产品设置运行的应用程序的状态。要实现该功能,需要ProcDump这个工具来创建进程的内存快照。这些转储信息可以加载到 Visual Studio 中进行分析。

和其他内存剖析工具类似,Visual Studio 2013 会列出每种类型所分配的实例数,以及从根到这些对象的路径。(“根”对象是可以通过静态字段或局部变量访问的对象,不能被垃圾收集器清理。)

确定内存泄露的根源仍然需要开发者完成,因此 Visual Studio 还比不上市面上的其他产品。利用正确的过滤器,Red Gate 的 ANTS Memory Profiler可以标记表现出常见错误(比如前面提到的事件处理程序导致的内存泄露)的对象。SciTech 的.NET Memory Profiler甚至做得更好,它会给出一份总结信息,对该工具所看到的内存问题予以警告。

SciTech 提供的信息也比 Visual Studio 2013 和 Red Gate 要详尽。它不但能指出从根到所观察对象的路径,还能显示最初创建该对象的语句的调用路径。对象上的所有字段也都可以得到。

Visual Studio 2013 中的内存剖析工具只是个预览版本,更多特性可能会在以后发布。但是从目前情况来看,在.NET 内存剖析方面,微软只能排第三,而且远远落后于前面两家。

查看英文原文:.NET Memory Profiling in Visual Studio 2013

语言 & 开发