【发布时间】:2011-05-09 17:28:34
【问题描述】:
我对 .NET 编程还很陌生,我目前正在开发一个计算机健康监控系统,该系统现在还处于起步阶段。我将使用 C# 2010 并使用 WMI 查询来查询计算机信息。
在进一步开发应用程序之前,我创建了一个迷你测试应用程序来测试我的类及其方法。测试应用的流程如下:
- 应用启动
- 输入主机名、用户名和密码
- 单击查询按钮并触发查询方法。
- 我的 UI 上的文本字段得到更新,打印出查询结果。
我有一个名为 Machine 的类,它包含诸如 CPU 名称之类的属性,以及一些可更新的属性,例如当前 CPU 使用率。在该类中,我有 2 个主要方法,GetStaticSysInfo 和 GetDynamicSysInfo,其中第一个方法查询不随时间变化的系统信息,后一个方法查询 CPU 和内存使用情况等信息。我有另一个名为 Refresh 的方法,我用它来包装 GetDynamicSysInfo 方法。
当我在 UI 中使用 WPF 时,我使用 DispatcherTimer 定期查询机器,并在单击 Query 按钮后将更新的信息打印到 UI 上的文本字段。但是,我注意到每次调用 machine.Refresh() 时,应用程序的内存使用量都会增加一点(几百 KB)。我真的无法弄清楚该程序出了什么问题,如果有人可以就此提供一些建议,我将不胜感激。
如果您需要更多信息或代码的任何部分,请告诉我。
提前致谢。
编辑:我在 Timer_Tick 方法上添加了 GC.Collect(),看起来内存使用量仍在攀升,但每隔几个计时器滴答声就会降低一次。它仍在增加,但速度较慢。这是正确的做法吗?从长远来看会影响性能吗?
【问题讨论】:
-
我还看到 WMI 产生越来越多的内存负载 - 令人抓狂的是它是间歇性的。基于 Visual Studio 应用分析器,它似乎来自
Select * from Win32_PnPEntity的结果——结果似乎在后续调用中不断增长。有趣的是,这只会在我使用特定的 USB 设备时发生。然后,只是偶尔会发生一次。