मुझे अपने एप्लिकेशन के स्क्रिप्ट एडिटर में लोड की जा रही बड़ी फ़ाइलों को संभालने का सुंदर काम मिला है (यह VBA की तरह है त्वरित मैक्रोज़ के लिए हमारे आंतरिक उत्पाद के लिए )। अधिकांश फाइलें लगभग 300-400 केबी की होती हैं जो ठीक लोड होती हैं। लेकिन जब वे 100 एमबी से आगे जाते हैं तो प्रक्रिया में एक कठिन समय होता है (जैसा कि आप उम्मीद करेंगे)।
क्या होता है कि फ़ाइल पढ़ी जाती है और एक रिचटॉक्सबॉक्स में भेज दी जाती है, जिसे तब नेविगेट किया जाता है - इस हिस्से के बारे में बहुत चिंता न करें।
डेवलपर जिसने प्रारंभिक कोड लिखा है, वह केवल स्ट्रीमरडर और कर का उपयोग कर रहा है
[Reader].ReadToEnd()
जिसे पूरा होने में काफी समय लग सकता है।
मेरा काम कोड के इस बिट को तोड़ना है, इसे एक बफर में चंक्स में पढ़ें और इसे रद्द करने के विकल्प के साथ एक प्रगति पट्टी दिखाएं।
कुछ धारणाएँ:
- ज्यादातर फाइलें 30-40 एमबी की होंगी
- फ़ाइल की सामग्री पाठ है (बाइनरी नहीं), कुछ यूनिक्स प्रारूप हैं, कुछ डॉस हैं।
- एक बार सामग्री पुनर्प्राप्त हो जाने के बाद हम बाहर काम करते हैं कि क्या टर्मिनेटर का उपयोग किया जाता है।
- रिचटेक्स्टबॉक्स में रेंडर करने में लगने वाले समय को लोड करने के बाद किसी का भी संबंध नहीं है। यह केवल पाठ का प्रारंभिक भार है।
अब प्रश्नों के लिए:
- क्या मैं केवल स्ट्रीमराइडर का उपयोग कर सकता हूं, फिर लंबाई की संपत्ति (तो प्रोग्रेसमैक्स) की जांच कर सकता हूं और एक सेट बफर साइज के लिए रीड जारी कर सकता हूं और एक बैकग्राउंड वर्कर के अंदर थोड़ी देर के लूप व्हाट्सएप के माध्यम से पुनरावृति कर सकता हूं , इसलिए यह मुख्य यूआई थ्रेड को ब्लॉक नहीं करता है? फिर पूरा होने पर स्ट्रिंगर को मुख्य धागे में लौटा दें।
- सामग्री StringBuilder में जा रही होगी। अगर लंबाई उपलब्ध है तो क्या मैं स्ट्रिंग के आकार के साथ स्ट्रिंगबर्ल को इनिशियलाइज़ कर सकता हूँ?
क्या ये (आपके पेशेवर विचारों में) अच्छे विचार हैं? मैं स्ट्रीम से सामग्री पढ़ने के साथ अतीत में कुछ मुद्दों पर था, क्योंकि यह हमेशा पिछले कुछ बाइट्स या कुछ और याद होगा, लेकिन अगर यह मामला है तो मैं एक और सवाल पूछूंगा।