3

我们有一个用 WPF 编写的复杂的内部 GUI 应用程序。有时我们发现直到我们强制才释放本机内存GC.Collect()。这是我们在生产环境中收集的统计数据。

在此处输入图像描述

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

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

我也想有一些关于如何识别过程中发生的事情的经验。我们有日志,并从多个用户那里收集了几个具有相同问题的不同日志。不幸的是,我们未能从不同的日志中找到相似性(看起来它会发生并随时开始发生)。

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

但是我们可以进行完整的内存转储——它是否有助于识别问题(以及如何识别问题)?

4

0 回答 0