0

Win32_PageFileUsage クラスに対して WMI クエリを実行すると、メモリ リークが発生します。私の状況では、5 分ごとに 200 台のサーバーに対して実行されています。約 3 時間後、メモリ リークは 10 GB 近くになりました。ページファイルが存在しないという事実に何らかの関係があると思います。値は「0」です。これが私のコードです:

...
ObjectQuery pageFileUsageQuery = 
        new ObjectQuery("SELECT AllocatedBaseSize, CurrentUsage FROM Win32_PageFileUsage");
m_PageFileUsageSearcher = new ManagementObjectSearcher(managementScope, pageFileUsageQuery);
...
var pageFileUsageCollection = m_PageFileUsageSearcher.Get();
double currentUsage = 0;
double maxSize = 0;

foreach (ManagementBaseObject managementBaseObject in pageFileUsageCollection)
{
        string result = managementBaseObject["CurrentUsage"].ToString();
        currentUsage += double.Parse(result);
}

システムは Windows Server 2008 SP2 です。多分誰かが何かアイデアを持っていますか?

4

2 に答える 2

1

ManagementObjectSearcher実装しますIDisposableManagementObjectCollectionおよびと同様ManagementBaseObject)。あなたはこれらを処分するべきです...おそらく適切に配置されたusingステートメントで。

ObjectQuery pageFileUsageQuery = 
        new ObjectQuery("SELECT AllocatedBaseSize, CurrentUsage FROM Win32_PageFileUsage");
using(m_PageFileUsageSearcher = new ManagementObjectSearcher(managementScope, pageFileUsageQuery))
{
    ...
    using(var pageFileUsageCollection = m_PageFileUsageSearcher.Get())
    {
        double currentUsage = 0;
        double maxSize = 0;

        foreach (ManagementBaseObject managementBaseObject in pageFileUsageCollection)
        {
            try
            {
                string result = managementBaseObject["CurrentUsage"].ToString();
                currentUsage += double.Parse(result);
            }
            finally
            {
                managementBaseObject.Dispose();
            }
        }
    }
}
于 2012-06-29T08:48:49.000 に答える