我正在尝试更新远程服务器上某些打印机的一些信息。我需要更新位置、评论和端口等内容。我有一个可行的解决方案,但我发现它非常慢,我想知道是否有人知道为什么。
我通过 WMI 从服务器获取打印机(以及后来的端口),代码如下:(这是测试代码)
var test = DateTime.Now;
ManagementScope scope3 = new ManagementScope("\\\\printserver\\root\\cimv2");
scope3.Connect();
SelectQuery q3 = new SelectQuery("select * from Win32_Printer WHERE Name = 'printername'");
ManagementObjectSearcher search3 = new ManagementObjectSearcher(scope3, q3);
var printers3 = search3.Get();
foreach(var p in printers3)
{
//do stuff with printer here.
}
var test2 = DateTime.Now.Subtract(test).TotalSeconds;
Run Code Online (Sandbox Code Playgroud)
完成后 test2 将包含“33.something”秒。如果我在没有 where 子句的情况下执行此操作,则几乎需要相同的时间。诚然,该服务器上有近 1500 台打印机,但我觉得我应该能够以更快的方式查询一台特定的打印机,而且我不明白为什么在打印机名称上使用 where 子句的查询会采用相同的方式时间作为“全选”查询。
有什么建议么?
--
更新
如下所示,我尝试多次运行相同的查询。仍然需要相同的时间。当我搜索特定打印机时,Windows 需要“触摸”系统上的每台打印机,这让我感觉很奇怪。