gpt4 book ai didi

c# - 定期 WMI 查询导致内存泄漏?

转载 作者:行者123 更新时间:2023-11-30 18:42:18 27 4
gpt4 key购买 nike

我是 .NET 编程的新手,目前我正在开发一个计算机健康监控系统,该系统目前处于初级阶段。我将使用 C# 2010 并使用 WMI 查询来查询计算机信息。

在进一步开发应用程序之前,我创建了一个迷你测试应用程序来测试我的类及其方法。测试应用的流程如下:

  1. 应用启动
  2. 输入主机名、用户名和密码
  3. 点击查询按钮并触发查询方法。
  4. 我的 UI 上的文本字段得到更新,打印出查询结果。

我有一个名为 Machine 的类,它包含 CPU 名称等属性,以及一些可更新的属性,例如当前 CPU 使用率。在该类中,我有 2 个主要方法,GetStaticSysInfo 和 GetDynamicSysInfo,其中第一个方法查询不随时间变化的系统信息,而后一个方法查询 CPU 和内存使用情况等信息。我有另一个名为 Refresh 的方法,用于环绕 GetDynamicSysInfo 方法。

因为我在我的 UI 中使用 WPF,所以我使用 DispatcherTimer 定期查询机器,并在单击“查询”按钮后将更新的信息打印到 UI 上的文本字段。但是,我注意到每次调用 machine.Refresh() 时,应用程序的内存使用量都会增加一点(几百 KB)。我真的无法弄清楚该程序有什么问题,如果有人可以就此提供一些建议,我将不胜感激。

如果您需要更多信息或代码的任何部分,请告诉我。

提前致谢。

编辑:我在 Timer_Tick 方法上添加了一个 GC.Collect(),看起来内存使用率仍在攀升,但每隔几个计时器滴答声就会降低一次。它仍在增加,但速度较慢。这是正确的做法吗?从长远来看,它会影响性能吗?

最佳答案

除非出于诊断目的,否则您永远不应调用 GC.Collect()。运行时对于 GC 应该运行的时间有更好的算法。此外,过于频繁地调用 Collect() 会导致对象被提升到第 1 代或第 2 代,这实际上意味着它们在不再使用后被收集得更慢,即增加内存占用。

如果在手动收集后内存再次下降(到以前的值),那么你没有内存泄漏。由于 GC 不会一直运行,因此您会在 GC 运行之间增加内存。无需担心。

关于c# - 定期 WMI 查询导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5934639/

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