gpt4 book ai didi

java - 确定打印机是否可以在不查找的情况下处理打印作业

转载 作者:IT老高 更新时间:2023-10-28 13:52:39 56 4
gpt4 key购买 nike

我一直在与 PrintServiceLookup 作斗争; lookupPrintServices(DocFlavor flavor, AttributeSet attributes) 方法在初始运行时检测我们的应用程序中的打印机非常慢。拥有超过 100 台网络打印机的客户报告说,执行此代码的行为在第一次运行时表现不佳。

在看到查找结果被缓存后,我最初在一个单独的线程中部署了一个虚拟查找(在启动时执行)。但是,对于特定客户,此解决方案不起作用。

我目前没有他们的环境,也看不出是什么导致了确切的性能问题。

我正在尝试查看 PrintService 是否支持给定的 MediaSizeName 不执行 DocFlavor 查找> 和 AttributeSet。所以我拉出了所有可用的 PrintService 和默认的 PrintService:

private static final PrintService[] PRINTSERVICES = 
PrintServiceLookup.lookupPrintServices(null, null);

private static final PrintService DEFAULTSERVICE =
PrintServiceLookup.lookupDefaultPrintService();

然后,从客户端请求中获取PrintServiceMediaSizeName。最后,我询问 PrintService 是否支持 MediaSizeName:

private void checkPrintServiceForMediaSize(PrintService pservice) throws MediaSizeNotSupportedException{
if(!pservice.isAttributeValueSupported(_mediaSizeName,null,null))
throw new MediaSizeNotSupportedException("This media size is not supported by the selected printer.");
}

API声明当 isAttributeValueSupported(Attribute attrval,DocFlavor flavor,AttributeSet attributes) 以 null DocFlavorAttributeSet 调用时

this method tells whether this Print Service supports the given printing attribute value for some possible combination of doc flavor and set of attributes

并且到目前为止表现正确。但是,如果打印机支持选定的页面大小,我不完全确定这是否是执行方式。

感谢您对此问题的反馈和经验。


更新

在我实现我的方法时,我的工作站决定出现严重的网络问题,这让我花了一段时间才弄清楚。最后,我的实现已经用网络工具 SoftPerfect Connection Emulator 进行了测试。 (模拟网络负载),结果并没有明显改善。

我会继续测试和更新这个问题。希望我能找到解决方案并与这里的人分享。我猜最初的查找:

private static final PrintService[] PRINTSERVICES = 
PrintServiceLookup.lookupPrintServices(null, null);

仍在引起问题。


更新 2

测试版最终在客户端环境中进行了测试,打印对话框的性能提升了大约 5 倍(在相同环境下,打印机的初始拉动现在大约需要 1 分钟,而在相同环境下大约需要 5 分钟)。最初的等待时间仍然不是可接受的时间量,但是,这是我现在能做的最好的时间。我们还从客户那里听说正在使用打印服务器,并且按照评论 (@Wardy) 中的建议,我将朝着这个方向前进。希望我们可以利用打印服务器的优势。

最佳答案

更积极的缓存。让客户端执行一次查找并在重新启动之间保留缓存。更好的是,将缓存保存到所有客户端都可以访问的中央数据存储中。

我假设网络打印机及其功能不会经常更改,但您最终必须更新缓存,但“谁”和“何时”取决于您的环境。

可以由在后台运行当前发现的客户端对缓存进行更新,如果检测到更改,则更新缓存。如果您有一个无论如何都连续运行的中心组件,那将是您可以定期检查的好地方。

如果您有某种目录服务,您可以在联系每台打印机之前将其打印机列表与您的缓存进行比较,以获得其减少网络和 CPU 负载的能力。

关于java - 确定打印机是否可以在不查找的情况下处理打印作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012314/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com