बिना प्रिंट नौकरी को संभाल सकता है, मैं PrintServiceLookup
से जूझ रहा हूं; शुरुआती रन-इन के साथ हमारे आवेदन में प्रिंटर का पता लगाने के लिए lookupPrintServices(DocFlavor flavor, AttributeSet attributes)
विधि अत्यधिक धीमी है। 100 से अधिक नेटवर्क प्रिंटर वाले ग्राहकों ने सूचित किया है कि इस कोड को निष्पादित करने वाले व्यवहार को पहली बार चलाने पर खराब प्रदर्शन किया जा रहा है।यह निर्धारित करना कि कोई प्रिंटर बिना प्रिंट-अप
यह देखने के बाद कि लुक-अप परिणाम कैश किए जा रहे हैं, मैंने शुरुआत में एक अलग थ्रेड (स्टार्ट-अप पर निष्पादित) के भीतर एक डमी लुक-अप तैनात किया है। हालांकि, किसी विशेष ग्राहक के लिए यह समाधान काम नहीं कर रहा है।
मेरे पास वर्तमान में उनका पर्यावरण नहीं है और यह नहीं देख सकता कि सटीक प्रदर्शन समस्या क्या हो रही है।
मैं एक PrintService
DocFlavor
और AttributeSet
की लुक-अप प्रदर्शन कर दिए गए MediaSizeName
बिना समर्थन करता है तो देखने के लिए कोशिश कर रहा हूँ।
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
private static final PrintService DEFAULTSERVICE =
PrintServiceLookup.lookupDefaultPrintService();
और फिर, PrintService
और MediaSizeName
ग्राहक के अनुरोध से प्राप्त: तो मैं सभी उपलब्ध PrintService
रों और डिफ़ॉल्ट PrintService
खींच। अंत में, मैं 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)
अशक्त DocFlavor
और AttributeSet
साथ कहा जाता है
इस विधि बताता है इस प्रिंट सेवा दी मुद्रण का समर्थन करता है कि क्या डॉक्टर स्वाद के कुछ संभावित संयोजन और गुणों के सेट के लिए विशेषता मान
और हेक्टेयर अब तक सही ढंग से व्यवहार किया है। हालांकि, अगर मैं प्रिंटर किसी चयनित पृष्ठ आकार का समर्थन करता है तो यह पूरी तरह से सुनिश्चित नहीं है कि यह करने का तरीका है।
मैं इस मुद्दे पर आपकी प्रतिक्रिया और अनुभव की सराहना करता हूं।
अद्यतन
समय मैं अपने दृष्टिकोण को लागू किया आसपास, मेरे कार्य केंद्र गंभीर नेटवर्क समस्याओं का फैसला किया है, जो मुझे कुछ समय ले लिया यह पता लगाने की। अंत में, मेरे कार्यान्वयन का परीक्षण नेटवर्किंग टूल SoftPerfect Connection Emulator (नेटवर्क लोड अनुकरण करने के लिए) के साथ किया गया है और परिणामों में उल्लेखनीय सुधार नहीं हुआ है।
मैं इस प्रश्न का परीक्षण और अद्यतन जारी रखूंगा। उम्मीद है कि मैं एक समाधान पा सकता हूं और इसे यहां लोगों के साथ साझा कर सकता हूं। मुझे लगता है कि प्रारंभिक देखने अनुमान लगा रहा हूँ:
private static final PrintService[] PRINTSERVICES =
PrintServiceLookup.lookupPrintServices(null, null);
अभी भी समस्याएं आ रही हैं।
अद्यतन 2
बीटा निर्माण अंत में ग्राहक वातावरण और मुद्रण संवाद के प्रदर्शन पर परीक्षण किया जाता है में सुधार के बारे में 5 बार है (प्रिंटर की प्रारंभिक पुल अब एक ही के तहत लगभग 1 मिनट लेता है पर्यावरण लगभग 5 मिनट की तुलना में)। फिर भी प्रारंभिक प्रतीक्षा समय स्वीकार्य समय नहीं है, हालांकि, अब मैं सबसे अच्छा कर सकता हूं। हमने क्लाइंट से यह भी सुना है कि एक प्रिंट सर्वर का उपयोग किया जा रहा है और टिप्पणियों (@ वार्डी) में दिए गए सुझावों का पालन करते हुए, मैं इस दिशा में आगे बढ़ रहा हूं। उम्मीद है कि हम प्रिंट सर्वर के फायदों का लाभ उठा सकते हैं।
क्या आप स्टार्टअप पर एक अलग थ्रेड में वास्तविक लुकअप कर सकते हैं? – eabraham
@ इब्राहम जैसा कि मैंने बताया है कि स्टार्टअप पर एक डमी लुकअप किया गया है। किए जाने वाले सभी लुकअप उपयोगकर्ता इनपुट पर निर्भर करते हैं। – arin
क्या आपने यह देखने के लिए प्रोफाइल किया है कि समय कहां बिताया गया है? मेरा अनुमान है कि खराब DNS-सर्वर एंट्री के साथ संयुक्त रूप से विभिन्न प्रकार के होस्ट नाम लुकअप पर बहुत समय व्यतीत होता है। –