【发布时间】:2023-04-09 22:27:01
【问题描述】:
我的一个应用程序出现了一个看起来像内存泄漏的问题(该应用程序会随着时间的推移使用更多内存,大约一周后它会挂起)。
我已经检测到并修复了一些与我编写的类相关的泄漏(比较使用 sos.dll 获取的堆转储很快就会发现它们),并且这些泄漏的数量不再增加。
目前,随着时间的推移,唯一显着增加的是 WeakReference 实例,它以每分钟 1,000 个新 WeakReference 实例的稳定速度增长。
我的代码没有直接使用WeakReference,我从不自己创建。
什么会导致创建这么多WeakReference 实例?
我正在使用 VB.NET、Visual Studio 2008 和 .NET 3.5
【问题讨论】:
-
你在使用 ORM 吗? (如 Entity Framework、Linq-to-sql、NHibernate)你是 Web App 吗?
-
您是否尝试过使用 Microsoft 的 CLR profiler 查看引用的内容?
-
我的应用程序是本地应用程序(通过串行端口或 TCP 套接字与其他设备通信)。我使用的唯一 ORM 是 LINQ2SQL,这是一个不经常使用的辅助函数(除非用户专门调用该功能,否则不会被调用)。如果您认为可以,我可以将 ORM 部分完全从应用程序中删除以进行测试。
-
@Marc,不,我没有,我现在就去学习如何做,不知道这是可能的!
-
既然您已经熟悉 SOS,您是否尝试过在其中一些 WeakReferences 上使用“gcroots”命令来确定是什么持有它们(因此可能也是首先创建它们的原因) ?
标签: .net vb.net memory-leaks weak-references