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

标签 c# wmi printers

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

我使用如下代码通过 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# - Win32_Printer 远程 WMI 查询真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743919/

相关文章:

c# - 需要从 C# 中的分隔符中提取字符串

c# - 如何将可序列化对象保存到文件/从文件恢复?

C# WMI 代码,用于计算 Windows Server 2008 上挂载点上的可用空间和驱动器空间

printing - 使用 maskdict 在 postscript 中进行图像屏蔽

windows-7 - 安装RedMon后无法在Windows 7中添加新的重定向端口

c# - 在 Xaml 中声明元组

c# - 没有虚拟和覆盖的功能覆盖

c# - SelectQuery 占用 100% CPU

c++ - 来自 C++ 的 WMI 调用导致 HRESULT=0x80041003

printing - Okidata MB760、MB492 等 PJL 命令