【问题标题】:What alternatives are available to WMI for obtaining the state of a printer?WMI 有哪些替代方法可用于获取打印机的状态?
【发布时间】:2011-06-22 14:14:41
【问题描述】:

C#/.NET 中有哪些选项可用于获取已安装打印机的状态?我们需要的唯一信息是打印机是打开还是关闭(屏幕上有一个小指示器显示“打印机就绪”或“打印机离线”)。

我们的应用程序是在嵌入式 PC 上运行的小型客户端。我们发现 WMI Windows 进程内存不足。在我的开发 PC 上观看它似乎存在内存泄漏,因为它使用的内存量慢慢增加。在内存有限的嵌入式设备上,这是不可接受的,我们在几个小时后发现应用程序崩溃了。

【问题讨论】:

  • 您是否尝试过处理内存泄漏?
  • WMI 进程 (wmiprvse.exe) 正在增加,因此看来内存泄漏超出了我的控制范围。我每秒循环执行以下操作:- ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer"); foreach (ManagementObject printer in searcher.Get()) { // Checking the name of the printer and firing an event with the value of the work offline property }
  • 仍然可能是您的代码没有释放另一端。尝试只使用一个ManagementObjectSearcher
  • 我也尝试过只拥有一个 ManagementObjectSearcher 静态实例的方法,但我仍然看到 WMI 进程继续增长。

标签: c# .net printing wmi


【解决方案1】:

我会尝试解决内存泄漏,但如果你找不到它,你总是可以使用PInvoke 调用(特别是GetPrinterData)。查看示例here(注意:也有 WMI 帖子可以帮助您比较您拥有的内容并查看是否可以找到内存泄漏)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多