gpt4 book ai didi

.net - 需要帮助消除我的应用程序中的弱引用

转载 作者:行者123 更新时间:2023-12-04 14:53:09 25 4
gpt4 key购买 nike

我正在尝试解决我的应用程序中的内存泄漏问题。我已经下载并运行了 RedGate 的 ANTS Memory Profiler 5.0,内存分析器告诉我泄漏与 WeakReferences 有关。

我遇到的问题是我从未听说过 WeakReference 也没有在我的应用程序中明确声明它们。根据我所做的阅读,我相信弱引用是在您有一个试图被销毁但无法销毁的对象/资源时创建的,因为有太多其他对象一直在引用它。我假设一个文件不能被删除,因为它仍在使用中。

所以我的问题是如何确定这些弱引用来自哪里?我怀疑这可能是 ByRef 的使用?另一位同事建议使用哈希表。

希望得到一些关于弱引用检测和消除的澄清,并澄清我的怀疑。

谢谢。

最佳答案

在与 .NET 资源泄漏(内存/句柄/线程/等)的斗争中,我们发现了一个高于一切的罪魁祸首:挥之不去的事件处理程序。如果我有一个想要处理的对象,但我仍然有一个事件处理程序注册到该对象的事件,那么该对象不会真正消失——这些僵尸会成倍增加并串在一起,直到 繁荣! 你被管理的应用程序的所有意图和目的都是资源泄漏。

我们采用了霰弹枪的方法,并为我们手动添加和通过 VB.NET 的“句柄”关键字添加的事件搜索了最常用、最重的类,并确保在 Dispose 期间为每个类调用 RemoveHandler/-=。我们还明确地尽可能多地处置。

ANTS 是一个很好的跟踪这些问题的工具,但它不是一个简单的工具(但它是我为这些问题找到的最简单的工具)。花一些时间熟悉它,如果您使用的是第 5 版,请使用这些新过滤器。

不幸的是,没有 Elixir ,这是我对 .NET 最大的不满之一,因为通常您不知道自己遇到了问题,直到问题非常广泛且难以控制。

关于.net - 需要帮助消除我的应用程序中的弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109794/

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