मेरे पास एक ऐसा एप्लिकेशन है जिसे मुझे बाद में सफाई के साथ सौंपा गया है। एप्लिकेशन स्वयं अपेक्षाकृत सरल है - यह एक SQL क्वेरी चलाता है, एक वेब सेवा का उपभोग करता है, और परिणाम को लॉग फ़ाइल में चलाता है। मेरा काम उनके NAS के साथ फाइलों को संग्रहीत करने के बाद फाइलों को संग्रहीत करना है। यह फ़ाइलों को विशेष रूप से तब तक लॉक करता है जब तक कि यह उनके साथ नहीं किया जाता है, इसलिए यह जटिलता का एक छोटा सा जोड़ता है। मुझे एप्लिकेशन को स्पर्श करने की भी अनुमति नहीं है, बस लॉग। वैसे भी अपने आवेदन काफी सरल है:रिवर्स स्ट्रीमreader
- चेक अगर फ़ाइल खोला जा सकता है (IOException पकड़ने) और यह एक bool [] अगर कोई अपवाद नहीं फेंक दिया जाता है के रूप में सुलभ बंद निशान।
- सत्य चिह्नित फ़ाइलों की सरणी के माध्यम से जाकर, रीडलाइन विधि का उपयोग कर फ़ाइल की प्रत्येक पंक्ति को StreamReader में पढ़ें। चूंकि एप्लिकेशन कभी-कभी हिचकिचाहट करता है और खत्म नहीं होता है, इसलिए मैं यह कहने के लिए IOException का उपयोग नहीं कर सकता कि फ़ाइल पूरी हो गई है या नहीं - मुझे वास्तव में पाठ को पार्स करना है।
- यदि पाठ को पूरा करने का संकेत मिलता है, तो फ़ाइल को ज़िप करें, संग्रहीत फ़ाइल को NAS पर लोड करें, और मूल को हटाएं।
मेरा कोड काम करता है, यह बहुत समय ले रहा है (लॉग फाइलें प्रत्येक 500 एमबी के आसपास हैं)। सुधार पर मेरे विचारों में शीर्ष से की बजाय फ़ाइल के नीचे से मेरी खोज शुरू करना शामिल है, लेकिन StreamReader ऐसी विधि का समर्थन नहीं करता है। मैं ReadToEnd विधि का उपयोग नहीं कर सकता और फिर रीवर्स पढ़ सकता हूं क्योंकि यह सिर्फ स्मृति अपवाद से बाहर फेंकता है। किसी भी विचार पर मैं लॉग फ़ाइल की पार्सिंग तेज कर सकता हूं?
आप जानते हैं कि फ़ाइलों को पार्स धीमी हिस्सा है है की तरह कोड के साथ किया जा सकता है? ज़िपिंग नहीं, NAS को प्रतिलिपि बनाना, फ़ाइल को खोलने या हटाने की कोशिश करना (और संभावित रूप से असफल) उन सभी चीजों की आवाज़ जैसे ध्वनि – luke
संभावित डुप्ली: http://stackoverflow.com/questions/452902/how-to-read -ए-टेक्स्ट-फ़ाइल-रिवर्सली-साथ-इटेटर-इन-सी –
अच्छा सवाल। हाँ, यह निश्चित रूप से पार्सिंग है जो निष्पादन का समय लेने वाला हिस्सा है। मैंने व्यक्तिगत कार्यों में कोड को अलग किया और प्रत्येक पर ब्रेक पॉइंट डाला। ज़िप में लगभग 30-30 सेकंड लगते हैं, पार्सिंग दो घंटों तक ऊपर ले जा सकती है। – monkeyninja