gpt4 book ai didi

C#内存泄露、追踪技巧和工具

转载 作者:太空狗 更新时间:2023-10-29 18:33:17 25 4
gpt4 key购买 nike

我正在编写的应用程序因内存泄漏而受到严重影响。当用户关闭加载的项目时,几乎整个对象模型都保留在内存中。我知道这是因为在我的应用程序中关闭一个项目几乎不会影响任务管理器中的内存使用,然后打开一个新项目几乎每次都会使它翻倍。我下载了 jetBrain 的 dotTrace Memory 3.5,但几乎没有(没有)使用说明。我有点想出了如何使用它,它表明当我在项目关闭后拍摄快照时,整个对象模型仍在内存中。浏览我的 projectClose 代码,我看不出有什么理由这样做。有没有人知道通常会导致 C# 内存泄漏的任何事情,或者是否知道任何用于跟踪问题的工具或技术。有一个应用程序显示我的整个对象模型仍然加载到内存中,但它没有显示存储它的对象或变量,这一切都很好。提前致谢。

最佳答案

首先,调查泄漏是否可能是由于事件处理程序的注册造成的,因为这是不小心将对象设为 root 的最简单方法之一。例如,如果您有一个类“Bob”,它添加了一个方法“OnSomeEvent”作为一个事件的委托(delegate),该事件由系统的长期存在的组件(例如“UserSettingsManager”)引发,那么类“Bob”的对象' 不会被收集,因为它们作为事件处理程序而保持事件状态(即事件回调不是弱引用)。

作为商业工具的替代品,有一个名为 SoS(Son of Strike)的 Windows 调试器扩展,您可以使用它来调试托管应用程序。然而,它并不是胆小鬼,因为它是一个低级的命令行工具,需要大量的前期学习。然而,它非常强大,并且不会像商业工具那样与更大的进程(在堆消耗方面)纠缠不清。

就商业分析器而言,我对 Redgate 的 ANTS Memory Profiler 有很好的体验(但我有一些讨厌它的同事)所以它可能值得一试。

关于C#内存泄露、追踪技巧和工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com