调试高内存使用情况
Posted
技术标签:
【中文标题】调试高内存使用情况【英文标题】:Debug High Memory Usage 【发布时间】:2013-04-09 20:31:43 【问题描述】:有哪些好的工具/技术可以用来发现代码的哪些区域正在使用大量内存?我已经看到类似的关于 linux 的问题提到了 valgrind,但没有一个针对使用 Visual Studio 2010 开发的 Windows 应用程序的问题。
【问题讨论】:
您可能已经考虑过这一点,但 Windows 应用程序通常可以使用 Wine 在 valgrind 中运行。 【参考方案1】:还有AQTime,如果您使用分配分析器,它可以为您提供已分配对象的列表和创建每个对象的位置的调用堆栈。
其他选项包括使用您的代码对象的实例计数器手动检测您的代码。不理想,但它可能很有用,尤其是在分析工具无法运行您的应用程序时(例如,由于内存不足或检测故障等)。
这些工具通常不会以非常明显的方式显示内存碎片 - 如果您有大量大对象和大量小对象以不同的顺序频繁分配和释放,则很容易发生这种情况。如果可能的话,对其中一些对象使用池是值得的,它可能会对内存使用量以及在某些情况下的性能产生巨大影响。
【讨论】:
【参考方案2】:VS2010 中包含的 Microsoft CRT 对内置的泄漏检测具有强大的支持。在 crtdbg.h 标头中可用,在此 MSDN library article 中有很好的描述。
如果这太难了,那么 Windows 调试工具包可能会非常有用。 UMHD (User Mode Heap Debugger) utility 可以在不更改程序的情况下报告泄漏。
【讨论】:
谢谢,我会尝试看看内存泄漏是否是一个严重的问题,否则我不会尝试调试内存泄漏,而是要找出代码的哪些区域使用的内存最多.【参考方案3】:性能向导允许非常详细地查看资源利用率,并可以突出显示导致高内存负载的单行代码。 要启动向导,请单击 Visual Studio 的分析菜单,然后单击启动性能向导。 运行完整检查可能需要高级版本或更高版本。
【讨论】:
嗯,这是 2012 年的特色吗?我在 2010 年没有“分析”菜单。 不,它在 2010 年也可用。但您可能拥有 Visual Studio 的 Express 或 Professional 版本。 是的,我有专业的。我想我需要最终的分析选项。 或高级版,像我一样...对不起,我不知道。以上是关于调试高内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中调试时启用内存使用情况中的实时图表