如何解决C# 控制台应用程序WMI 查询突然填满内存
我有一个 C# 应用程序,它创建 Cimsession 或 ManagementScope 连接并每秒在数十台远程 PC 上并行查询“PercentProcessorTime”。 通常应用程序可以正常工作几个小时,然后突然开始填满内存。平均 100MB 的 RAM 使用量在一个小时内跃升 4-5GB。 我无法了解这里发生了什么。 以下是每秒钟运行的两种方法:
public static bool DumpProcessescpu(string hostname)
{
bool overTreshold = false;
try
{
Cimsessionoptions sessionoptions = new Cimsessionoptions() { Timeout = TimeSpan.FromSeconds(5) };
using (Cimsession mySession = Cimsession.Create(hostname,sessionoptions))
{
string Namespace = @"root\cimv2";
IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace,"WQL",queryString);
foreach (CimInstance cimInstance in queryInstance)
{
int currentValue = Convert.ToInt32(cimInstance.CimInstanceProperties["PercentProcessorTime"].Value);
if (showLiveData == "true") Log.Debug("{0} - {1}",hostname,currentValue.ToString());
if (currentValue >= treshold)
{
overTreshold = true;
}
}
}
}
catch (SystemException e)
{
Log.Error("An error occurred while querying for WMI data for " + hostname + ": " + e.Message);
}
return overTreshold;
}
和
public static bool DumpProcessescpuLegacy(string hostname)
{
bool overTreshold = false;
try
{
Connectionoptions options = new Connectionoptions() { Timeout = TimeSpan.FromSeconds(5) };
ObjectQuery query = new ObjectQuery(queryString);
ManagementScope scope = new ManagementScope(@"\\" + hostname + @"\root\cimv2",options);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope,query))
{
foreach (ManagementObject queryObj in searcher.Get())
{
int currentValue = Convert.ToInt32("" + queryObj["PercentProcessorTime"]);
if (showLiveData == "true") Log.Debug("{0} - {1}",currentValue.ToString());
if (currentValue >= treshold)
{
overTreshold = true;
}
}
}
}
catch (ManagementException e)
{
Log.Error("An error occurred while querying for WMI data for " + hostname + ": " + e.Message);
}
return overTreshold;
}
我正在使用 Parallel.Foreach 每秒在每台远程 PC 上运行这些方法之一。 我在任何地方都使用了大量日志记录和 try-catch,并且没有错误消息。
这里可能有什么问题?我应该在哪里继续调查?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。