编程语言
首页 > 编程语言> > c# – Win32_Printer远程WMI查询真的很慢

c# – Win32_Printer远程WMI查询真的很慢

作者:互联网

我正在尝试更新远程服务器上某些打印机的某些信息.我需要更新位置,评论和端口等内容.我有一个有效的解决方案,但我发现它很慢,我想知道是否有人知道为什么.

我从服务器通过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;

完成后,test2将包含“33.something”秒.
如果我在没有where子句的情况下这样做,则几乎需要相同的时间.不可否认,这台服务器上有近1500台打印机,但我觉得我应该能够以更快的方式查询一台特定的打印机,而且我不明白为什么带有打印机名称的where子句的查询也是如此时间作为“全选”查询.

有什么建议?

更新

如下所示,我尝试多次运行相同的查询.仍然需要相同的时间.我觉得很奇怪,当我在搜索特定的打印机时,Windows需要“触摸”系统上的每台打印机.

解决方法:

Admittedly there are almost 1500 printers on this server

那当然是令人讨厌的小细节.每台打印机需要33/1500 = 0.022秒.这在计算机中是一个非常神奇的数字,关于在主轴磁盘上打开文件需要多长时间.

您可以执行一个简单的测试来检查它是否确实是作为瓶颈的磁盘.只需在慢速查询后再次运行查询.文件信息现在将缓存在文件系统缓存中,它应该在不到一秒的时间内执行.您可能已经这样做了,用您发现的内容更新您的问题.

当然,你在软件方面做的很少.服务器需要更好的硬件才能让您满意. SSD是非常好的,应该以20的简单因子加快速度.更多RAM可以帮助但不是黄金解决方案.更频繁地调用服务器以便将文件数据保存在缓存中是一种解决方法,对服务器不是很友好.

标签:c,wmi,printers
来源: https://codeday.me/bug/20190628/1317649.html