Мне сообщили коллега, что если мои запросы на сбор информации о системе WMI доступны только для чтения и/или только для чтения, они будут довольно быстрыми. В этом есть смысл. Но как мне это сделать?Как сделать запросы WMI только для чтения, только для чтения на C#?
ответ
Вам необходимо использовать класс EnumerationOptions и установить для его свойства Rewindable значение false. Вот пример:
using System;
using System.Management;
namespace WmiTest
{
class Program
{
static void Main()
{
EnumerationOptions options = new EnumerationOptions();
options.Rewindable = false;
options.ReturnImmediately = true;
string query = "Select * From Win32_Process";
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(@"root\cimv2", query, options);
ManagementObjectCollection processes = searcher.Get();
foreach (ManagementObject process in processes)
{
Console.WriteLine(process["Name"]);
}
// Uncomment any of these
// and you will get an exception:
//Console.WriteLine(processes.Count);
/*
foreach (ManagementObject process in processes)
{
Console.WriteLine(process["Name"]);
}
*/
}
}
}
Вы не увидите каких-либо улучшений производительности, если не использовать его, чтобы перечислить класс с большим количеством экземпляров (как CIM_Datafile), и вы получите перечислить возвращаемый ManagementObjectCollection только один раз. Вы также не сможете использовать ManagementObjectCollection.Count и т. Д. Что касается запросов только для чтения, я не уверен, как их сделать.
Ваш коллега, должно быть, имел в виду использование полусинхронного метода вызовов вместе с перечислителями только для прямого доступа. В полусинхронном режиме вызовы метода WMI немедленно возвращаются и объекты извлекаются в фоновом режиме и возвращаются по требованию после их создания. Кроме того, при использовании полусинхронного режима для извлечения большого количества экземпляров рекомендуется получать только перечислители только для прямого просмотра, чтобы повысить производительность. Эти особенности объясняются в этом MSDN article.
Как Урос указал, чтобы получить только вперед нумератор в полусинхронном режиме, вам нужно использовать экземпляр EnumerationOptions
класса с ReturnImmediately
собственности, установленной в true
и Rewindable
имуществе установлено в false
, например:
EnumerationOptions opt = new EnumerationOptions();
opt.ReturnImmediately = true;
opt.Rewindable = false;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, opt);
- 1. Сделать ячейки только для чтения
- 2. Сделать JQxGrid только для чтения
- 3. Википедия API для чтения только для чтения?
- 4. Как открыть режим чтения только для чтения на C#?
- 5. Как сделать весну формой только для чтения?
- 6. Spring @Transactional для чтения только для чтения
- 7. Сделать Rails 5 API только для чтения
- 8. Как сделать ComboBoxCellEditor только для чтения?
- 9. Таблица «только для чтения»
- 10. Как сделать репозиторий git только для чтения?
- 11. Как сделать Windows Forms только для чтения?
- 12. Видео только для чтения?
- 13. Как сделать страницы aspx только для чтения?
- 14. Как сделать bootstrap datepicker только для чтения?
- 15. Использует YIELD для чтения только для чтения?
- 16. NTFS только для чтения
- 17. Как сделать таблицу только для чтения?
- 18. Как сделать Source Safe только для чтения?
- 19. Как сделать CKEditor только для чтения?
- 20. Как сделать QSlider только для чтения?
- 21. Как сделать результирующую ячейку только для чтения?
- 22. Необходимо сделать параметр как только для чтения,
- 23. Как сделать редактор wordpress только для чтения?
- 24. RichTextFX только для чтения?
- 25. Запись только для чтения
- 26. Только для чтения combobox?
- 27. Только для чтения PropertyGrid
- 28. Только для чтения строк
- 29. «CDbAuthManager.AuthAssignment» только для чтения
- 30. event.clientX только для чтения?