【发布时间】:2015-03-06 11:59:23
【问题描述】:
我有一个数据密集型应用程序,用户可以在其中选择不同的帐户。一次只能选择一个帐户,这会强制从数据库加载数据。我可以在 Windows 任务管理器中看到,当我将帐户加载到大约半个演出时,分配给我的应用程序的内存正在增加。
我们还可以“卸载”一个帐户,从而删除内存中的所有对象(或者至少我们认为我们这样做了)。无论我让应用程序在我的 PC 上处于休眠状态多久,它似乎永远不会将分配的内存减少回预加载帐户状态,即使我使用 WeakReference 查看对象状态时说它不是 ALIVE。
如果我在卸载方法结束时显式调用GC.Collect(),那么我可以看到内存未分配或至少 Windows 任务管理器中的程序大小下降。这是我们真正希望在内存方面实现的目标,因为一些用户遇到了内存不足的异常。
我知道垃圾收集器正在做一些管理,因为如果我加载后续帐户,内存永远不会真正增加超过半个 gig,所以我认为 GC 已经收集了前一个帐户的数据,就像它在卸载帐户时应该做的那样。
我是否应该继续使用 GC.Collect 考虑到相对于从数据库加载帐户而言运行它的成本是最低的,即使明确调用它被认为是“不好的做法”?
【问题讨论】:
-
在内存的情况下不要信任TaskManager。使用更可靠的东西作为性能监视器(在寡妇中键入 perfmon 来执行它),它显示工作集和私有字节。
-
感谢您的评论 - 我将继续使用它
标签: c# .net memory-management memory-leaks