确定打印机是否可以在不查找的情况下处理打印作业
我一直在与;该方法在初始磨合中检测应用程序中的打印机的速度太慢。具有 100 台以上网络打印机的客户端报告,执行此代码的行为在首次运行时表现不佳。PrintServiceLookup
lookupPrintServices(DocFlavor flavor, AttributeSet attributes)
在看到正在缓存查找结果后,我最初在单独的线程中部署了一个虚拟查找(在启动时执行)。但是,对于特定客户端,此解决方案不起作用。
我目前没有他们的环境,无法看到导致确切性能问题的原因。
我正在尝试查看是否支持给定,而无需执行和的查找。所以我拉了所有可用的s和默认值:PrintService
MediaSizeName
DocFlavor
AttributeSet
PrintService
PrintService
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
private static final PrintService DEFAULTSERVICE =
PrintServiceLookup.lookupDefaultPrintService();
然后,从客户端获取和请求。最后,我问是否支持:PrintService
MediaSizeName
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 声明当调用时,使用 null 和isAttributeValueSupported(Attribute attrval,DocFlavor flavor,AttributeSet attributes)
DocFlavor
AttributeSet
此方法告诉此打印服务是否支持文档风格和属性集的某些可能组合的给定打印属性值
并且到目前为止一直表现正确。但是,我不完全确定如果打印机支持选定的页面大小,这是否是执行的方法。
感谢您对此问题的反馈和经验。
更新
大约在我实施我的方法时,我的工作站决定有严重的网络问题,这花了我一段时间才弄清楚。最后,我的实现已经使用网络工具SoftPerfect Connection Emulator(模拟网络负载)进行了测试,结果没有显着改善。
我将继续测试和更新这个问题。希望我能找到一个解决方案,并与这里的人分享。我猜想最初的查找:
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
仍然导致问题。
更新 2
beta 版本最终在客户端环境中进行了测试,打印对话框的性能提高了约 5 倍(打印机的初始拉取现在在相同环境下大约需要 1 分钟,而现在需要大约 5 分钟)。但是,最初的等待时间仍然不可接受,但是,这是我现在能做的最好的事情。我们还从客户那里听说正在使用打印服务器,按照评论中的建议(@Wardy),我将朝着这个方向前进。希望我们可以利用打印服务器的优势。