ManagementObjectSearcher занимает так много времени, чтобы выполнить - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю с принтерами, и мне нужно общее имя принтера

подход 1

            string query = String.Format("SELECT * FROM Win32_Printer WHERE Name = '{0}'", PrinterName);
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            ManagementObjectCollection collection = searcher.Get();
            ManagementObject printer = collection.Cast<ManagementObject>().ElementAt(0);

            sharedName = printer.Properties["ShareName"].Value.ToString();

, и проблема с нимесли у вас есть общий принтер, такой как PrinterName="\\IN01RD09\ZDesigner GX420t", тогда я ничего не получу в collection, если его локальный принтер PrinterName="ZDesigner GX420t" работает нормально, поэтому

подход 2

 var printerQuery = new ManagementObjectSearcher("SELECT * from Win32_Printer");
                foreach (var printer in printerQuery.Get())
                {
                    var name = printer.GetPropertyValue("Name");
                    if (name.ToString().Equals(printerName))
                    {
                        sharedName = printer.GetPropertyValue("ShareName").ToString();
                        break;
                    }
                }

Работает нормально для обоих случаев, но если у меня так много принтеров, время выполнения составляет около минуты

, поэтому мне нужно минимизировать время или получить подход к работе 1, я тоже решил использовать потоки, я сохранюэтот вариант, если у меня нет решения, любая помощь будет оценена спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...