2011-08-19 7 views
7

मेरे पास एक जावा प्रोग्राम है जो यूनिक्स सॉर्ट कमांड को कॉल करने के लिए प्रोसेसबिल्डर का उपयोग करता है। जब मैं अपने आईडीई (इंटेलिजे) के भीतर यह कोड चलाता हूं तो 500,000 लाइनों को क्रमबद्ध करने में केवल एक सेकंड लगते हैं। जब मैं इसे निष्पादन योग्य जार में पैकेज करता हूं, और इसे टर्मिनल से चलाता है तो इसमें लगभग 10 सेकंड लगते हैं। जब मैं टर्मिनल से सॉर्ट कमांड चलाता हूं, तो इसमें 20 सेकंड लगते हैं!यूनिक्स सॉर्ट कमांड को कहां निष्पादित किया जाता है, इस पर निर्भर करता है ?! (आईडीई से चलने वाले प्रोग्राम में प्रोसेसबिल्डर से सबसे तेज़, टर्मिनल से धीमा)

प्रदर्शन में विशाल अंतर और किसी भी तरह से मैं एक ही प्रदर्शन के साथ निष्पादित करने के लिए जार प्राप्त कर सकता हूं? पर्यावरण ओएसएक्स 10.6.8 और जावा 1.6.0_26 है। तरह आदमी पृष्ठ के नीचे कहते हैं, "प्रकार 5.93 नवंबर 2004"

आदेश यह क्रियान्वित किया जाता है:

sort -t' ' -k5,5f -k4,4f -k1,1n /path/to/imput/file -o /path/to/output/file 

ध्यान दें कि मैं मैन्युअल टैब सीमांकक से बचने के लिए की जरूरत है जब मैं टर्मिनल से तरह चलाने के लिए और वास्तविक टैब के बजाय -t$'\t' तर्क का उपयोग करें (जिसे मैं प्रोसेसबिल्डर को पास कर सकता हूं)।

ps के रूप में देख रहे हैं सब कुछ समान लगता है जब आईडीई से चलाने के दौरान सॉर्ट कमांड का टीटीवी होता है ?? ttys000 के बजाय - लेकिन this question से मुझे नहीं लगता कि इससे कोई फर्क पड़ता है। शायद बाश मुझे धीमा कर रहा है? मैं विचारों से बाहर हूं और इस 20x प्रदर्शन अंतर को बंद करना चाहता हूं! http://code.google.com/p/externalsortinginjava/

बाहरी तरह पूरी तरह से बुलाने की जरूरत से बचें:

+0

वाह प्रयास करें .. मुझे लगता है कि मैंने देखा कि किसी और कल यह एक ही सवाल पूछते हैं। http://stackoverflow.com/questions/7111127/why-is-my-plplication-running-faster-in-intellij-compared-to-command-line – Kal

+1

क्या आप जानते हैं कि आप एक ही तरह से चल रहे हैं? सुनिश्चित करने के लिए निष्पादन योग्य के लिए एक पूर्ण पथ का प्रयास करें। यदि आपके पास ब्रू/मैकपोर्ट/फ़िंक स्थापित है, तो यह संभव है कि धीमे होने पर उन पैकेजों का क्रम चल रहा हो। – ergosys

+0

@ ज़ुगवाल्ट: प्रत्येक रिकॉर्ड कितना 'चौड़ा' है, या एक और तरीका है, आप जिस समग्र फ़ाइल को सॉर्ट कर रहे हैं वह कितनी बड़ी है। 1 सेकंड में एक सामान्य रिकॉर्ड का 500,000 यूनिक्स सिस्टम के लिए सही लगता है जिसका उपयोग मैं काम करने के लिए करता हूं। 20 सेकंड पागल लगता है। इस प्रकार अपनी temp फ़ाइलों को/tmp या/var/tmp dir में बनाएगा (जब तक कि आप इसे '-D' से ओवरराइड नहीं कर रहे हों)। हो सकता है कि आप प्रसंस्करण को देखकर वहां एक सुराग उठा सकें। अन्यथा, मैं डिस्क के साथ समस्याएं सोच रहा हूं, क्या आपका आईडीई मानक/tmp/या/var/tmp से भिन्न स्थान पर tmpfiles लिख रहा है? सौभाग्य। – shellter

उत्तर

12

मैं दो अनुमान उद्यम लिए जा रहा हूँ:

  • तरह का शायद आप लागू कर रहे हैं विभिन्न संस्करणों

  • शायद (एक which sort करते हैं और recompare करने के लिए पूर्ण निरपेक्ष पथ का उपयोग करें?) आप कर रहे हैं अधिक जटिल लोकेल सेटिंग्स का उपयोग (अधिक जटिल चरित्र सेट हैंडलिंग आदि के लिए अग्रणी)?

    export LANG=C 
    sort -t' ' -k5,5f -k4,4f -k1,1n /input/file -o /output/file 
    

तुलना करने के लिए

+2

से कॉल होने पर भी यूनिक्स सॉर्ट की तुलना में यह बहुत धीमी थी। आपका दूसरा अनुमान था। प्रक्रिया बुल्डर.एन्वायरमेंट() को कॉल करके प्रक्रिया ("LANG", "सी") प्रक्रिया से पहले बुल्डर। स्टार्ट() हमने देखा कि उसी प्रदर्शन को खोल से चलाया गया था (जो en_US: UTF-8 को डिफॉल्ट कर रहा था) आईडीई के रूप में। यह पढ़ा कुछ संख्याओं को प्रकट करता है en_US: यूटीएफ -8 लगभग 10x जितना धीमा है जितना धीमा और सीएक्स जितना धीमा हो उतना धीमा है जितना कि en_US http://computing.fnal.gov/unix-users/tips/Lang_Tips.html – Zugwalt

+1

ब्रावो @ सेहे! यहाँ कुछ मूल्यवान सीख लिया। Lang_Tips.html के लिंक को शामिल करने के लिए @Zugwalt को भी अपवर्तित करें। अति उत्कृष्ट! – shellter

+0

आपके समर्थन के लिए सभी को धन्यवाद! कभी-कभी कारण का अनुमान लगाने में बहुत भाग्यशाली होना अच्छा लगता है :) – sehe

0

इस परियोजना पर एक नज़र डालें।

+2

ने इसे आज़माया लेकिन कंसोल (1 मिनट 30 सेकंड) – Zugwalt

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

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