Csharp/C#教程:如何解决私有字节(本机内存)泄漏?分享


如何解决私有字节(本机内存)泄漏?

我正在开发一个似乎有漏洞的C#应用​​程序。 我用过内存分析器,发现我的

私有字节不断增加,但所有堆中的 字节数不会增加,这意味着它可能是本机内存泄漏

现在我卡住了,如何在本机代码中发现内存泄漏?

首先,如果你有一个泄漏过程的转储,你可以在WinDbg中打开它并发出命令:!address -summary

如果这是本机泄漏,那么您有两个选择:

如果这是.NET泄漏,则有第三方工具对其进行故障排除。 从版本1.2开始,DebugDiag也可以执行.NET内存泄漏分析(但从未尝试过)。

诊断托管应用程序中的本机内存泄漏(至少最初)非常类似于诊断任何其他本机应用程序中的内存泄漏。

我通常处理这些问题的方法是让进程泄漏大量内存,进行完整的进程转储,然后检查转储以查看使用最多内存的内容。 例如,如果你的进程有一个~20MB的正常/初始私有字节,但你可以让你的进程泄漏内存,直到它有~200MB的私有字节,那么很可能会泄漏~180MB的内存 – 一般来说分配最多内存的是你应该开始寻找的地方。

Microsoft有一个非常有用的工具叫做DebugDiag – 最初开发用于诊断IIS中的内存泄漏,它是一个非常多用途的工具,在处理内存问题时非常方便。 如果你给它一个崩溃转储,它将执行一些分析,并且应该(至少)告诉你哪个模块已经分配了所有内存,然后你可以开始更具体地查看该模块的使用方式。

没有更多信息很难给你一个坚实的反应,但听起来你试图使用的lib有内存泄漏。 您需要使用适当的工具来使用lib,具体取决于它所使用的语言。如果您没有lib的源代码,请联系开发人员并让他们修复泄漏。

如果您可以发布库的名称和一些源代码(以及本机方法签名),我们可能会给您一些更具体的建议。

由.net框架管理的堆中的私有字节,您需要使用专业工具来分析您的源。 比如使用红门内存分析器,找到创建但未被处置的对象。

通常我在使用ANTS Memory Profiler寻找内存泄漏时获得了最佳结果。

( 或其他工具 ,我亲身体验过ANTS的最佳体验)

上述就是C#学习教程:如何解决私有字节(本机内存)泄漏?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1024547.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

精彩推荐