非托管内存只能通过强制GC释放,但为什么呢?

时间:2016-04-01 21:21:19

标签: .net wpf memory garbage-collection unmanaged-memory

我们有一个用WPF编写的复杂内部GUI应用程序。有时我们发现在我们强制GC.Collect()之前,本机内存不会被释放。以下是我们在生产环境中收集的统计数据。

enter image description here

我们可以看到非托管内存出现峰值,但托管内存使用量保持低位且稳定。

我知道GC只会在需要时发生,但是当有大量无人认领的非托管时,用户确实感觉很慢。当我们手动收集GC时,它显然更快。 GC之后可以释放非托管内存,所以我认为这不是内存泄漏。

我还希望了解如何识别流程中发生的事情。我们有日志,并从多个用户收集了几个具有相同问题的不同日志。遗憾的是,我们未能找到不同日志的相似性(看起来会发生并随时开始发生)。

我们也无法在DEV或QA环境中重现该问题,或者我可以尝试使用DebugDiag来跟踪来自不同模块的非托管分配。顺便说一句,没有管理员权限,所以我无法在生产环境中跟踪非托管分配或设置全局标志。

但我们可以做完全内存转储 - 它有助于识别问题(以及如何)?

0 个答案:

没有答案