我的問題與Periodical WMI Query Causes Memory Leak?類似,但帶有線程。WMI導致內存泄漏(在多線程中運行時)
我在寫一個簡單的應用程序來監視來自多個服務器的進程和內存信息。但是有內存泄漏。我已經減少了以下簡單的控制檯應用程序的問題。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
public static void dummyQuery(string ip, string query)
{
ConnectionOptions connOptions = new ConnectionOptions();
ManagementScope mgtScope = new ManagementScope(@"\\" + ip + @"\ROOT\CIMV2", connOptions);
mgtScope.Connect();
ObjectQuery queryo = new ObjectQuery(query);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(mgtScope, queryo))
{
using (ManagementObjectCollection moc = searcher.Get())
{
}
}
}
static void Main(string[] args)
{
Console.ReadKey();
int times = 10000;
for (int i = 0; i < times; i++)
{
Thread t = new Thread(o => dummyQuery("xxxxxxxxx", @"SELECT WorkingSetSize FROM Win32_Process WHERE name='W3WP.exe'"));
//t.IsBackground = true;
t.Start();
System.Threading.Thread.Sleep(50);
}
Console.ReadKey();
//GC.Collect();
Console.ReadKey();
}
}
}
有沒有一種方法可以安全地從線程運行WMI查詢?
這是從一個非常複雜的wpf應用程序中提取的,該應用程序很像dummyQuery方法來檢查許多服務器的狀態。該應用程序以與WMI調用相關的令人不安的快速速率泄漏內存。這個例子看起來好像不是內存泄漏(Jim Mischel有更好的方法來檢查這個)。我將安裝一個探查器並再次查看原始應用程序。
你爲什麼要調用GC.Collect();手動? – Terrance
您是否確認內存分析器存在內存泄漏? – Yahia
也有你嘗試使用http://msdn.microsoft.com/en-us/library/system.management.wqlobjectquery.aspx – Terrance