认为.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 内存剖析方面,微软只能排第三,而且远远落后于前面两家。
评论