Использование ManagementObject для получения одного свойства WMI - PullRequest
2 голосов
/ 28 апреля 2010

Это, вероятно, не лучший способ, но в настоящее время я извлекаю объем оперативной памяти на машине, используя:

manageObjSearch.Query = new ObjectQuery("SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem");
manageObjCol = manageObjSearch.Get();

foreach (ManagementObject mo in manageObjCol)
 sizeInKilobytes = Convert.ToInt64(mo["TotalVisibleMemorySize"]);

Это работает хорошо и хорошо, но я чувствую, что мог бы делать это более напрямую и без foreach для одного элемента, но я не могу понять, как индексировать ManagementObjectCollection

Я хочу сделать что-то вроде этого:

ManagementObject mo = new ManagementObject("Win32_OperatingSystem.TotalVisibleMemorySize")
mo.Get();

Console.WriteLine(mo["TotalVisibleMemorySize"].ToString())

или, может быть, даже что-то вроде

ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
Console.WriteLine(mc.GetPropertyValue("TotalVisibleMemorySize").ToString());

Я просто не могу понять это. Есть идеи?

1 Ответ

3 голосов
/ 28 апреля 2010

Оператор foreach скрывает перечислитель, к которому вам нужен доступ. Вы можете сделать это прямо так:

        var enu = manageObjSearch.Get().GetEnumerator();
        if (!enu.MoveNext()) throw new Exception("Unexpected WMI query failure");
        long sizeInKilobytes = Convert.ToInt64(enu.Current["TotalVisibleMemorySize"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...