2012-03-06 8 views
33

वॉच सेवा एक महान तकनीक की तरह दिखती है लेकिन ओएस एक्स और लिनक्स सिस्टम पर उपयोगी होने के लिए यह बहुत धीमी है। चोट के अपमान को जोड़ने के लिए, ऐसा लगता है कि यह सभी घटनाओं के बारे में अधिसूचित नहीं है।जावा 7 वॉच सर्विस सर्विस किसी और के लिए धीमा है?

यह मेरे कोड और ओरेकल से कैनोलिक उदाहरण दोनों के मामले में है। (http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java)

मैं स्वीकार करते हैं कि ओएस एक्स OpenJDK बंदरगाह इस कार्यक्षमता के बारे में अनिश्चित है (https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status देखें)

किसी को भी हो गया है सफलता के साथ उत्पादन में इस का उपयोग करते हुए?

+3

लिए यह एक बहुत ही कष्टप्रद [ज्ञात मुद्दा] है (https://bugs.openjdk.java.net/browse/ जेडीके -7133447) 2012 से। – andruso

+1

प्रश्न "ओएस एक्स और लिनक्स" इंगित करता है लेकिन उत्तर और टिप्पणियां यह इंगित करती हैं कि यह केवल ओएस एक्स पर एक समस्या है। –

उत्तर

24

JDK 7 अभी तक MacOS के लिए WatchService के मूल निवासी कार्यान्वयन नहीं है। मूल फ़ाइल सिस्टम घटनाओं को सुनने के बजाय, यह fallback sun.nio.fs.PollingWatchService का उपयोग करता है, जो समय-समय पर फ़ाइल सिस्टम को घुमाता है और पेड़ में प्रत्येक फ़ाइल और उपनिर्देशिका के अंतिम संशोधित टाइमस्टैम्प की जांच करता है। मैंने यह भी असामान्य रूप से धीमा पाया है।

http://code.google.com/p/barbarywatchservice/

मैं इसे अपने आप का उपयोग करने के प्रयास नहीं किया है:

मैक के लिए WatchService के मूल निवासी कार्यान्वयन नहीं है।

+6

क्या यह अभी भी मैकोज़ के लिए जेडीके 8 में मामला है? –

+2

@ बेन, जाहिर है हां। हमें अभी भी बहुत धीमी होने और सभी घटनाओं को नहीं चुनने के कारण समस्याएं हैं। –

+2

ऐसा लगता है कि यह जेडीके 9 के लिए हल नहीं किया जाएगा। मुद्दा अभी भी खुला है https://bugs.openjdk.java.net/browse/JDK-7133447 और पिछली मेलिंग सूची चर्चा में कोई समाधान नहीं था: http://mail.openjdk.java.net/pipermail/ nio-dev/2014-अगस्त/002691.html। –

30

मैं काफी बेहतर प्रतिक्रिया समय है अगर मैं बदल

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY); 

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH); 
+1

बेहतर नोट है कि StandardWatchEventKinds enum com.sun। * संकुल में है। – eskatos

+0

हाँ! यही कारण है कि यह मेरे लिए बनाया गया था, जब तक मैं इसका इस्तेमाल नहीं करता तब तक मुझे 4 से 5 सेकेंड देरी हो रही थी। संदर्भ के लिए मैंने बनाई गई स्क्रिप्ट यहां है: https://gist.github.com/DinisCruz-Dev/9214909 –

+0

मेरे लिए वही, मुझे कम से कम 4 सेकंड की देरी हुई और इसने इसे काम किया (सामान्य रूप से) काम करता है लिनक्स या विंडोज़। बहुत बहुत धन्यवाद। –

संबंधित मुद्दे