दिलचस्प पोस्ट
फ़्रेम से इनहेरिट करना या टंकिनर आवेदन में नहीं PHP – फ़्लोटिंग नंबर प्रेसिजन जावास्क्रिप्ट फाइलों की सेवा करते समय, यह आवेदन / जावास्क्रिप्ट या एप्लिकेशन / एक्स-जावास्क्रिप्ट का इस्तेमाल करना बेहतर है इस java.lang.NoClassDefFoundError को कैसे हल करें: org / apache / commons / io / output / deferfileoutputstream? Homebrew + मैक ओएस एक्स 10.8 पर पायथन: घातक पायथन त्रुटि: PyThreadState_Get: कोई वर्तमान थ्रेड आयात करने वाले मैपनिक नेविगेशन पट्टी आईओएस स्विफ्ट की ऊंचाई बदलना एक्सएमएल स्कीमा और डीटीडी में क्या अंतर है? विशिष्ट वर्णों के लिए स्ट्रिंग कैसे जांचें? जावा दिनांक माह अंतर जावा में 2 दशमलव स्थानों के साथ फ्लोट डेटा का आउटपुट कैसे प्रदर्शित किया जाए? मेरे प्रोजेक्ट में कोई जेनरेट नहीं हुई आर.जेवा फाइल SSL_connect = = errno = 0 state = SSLv3 पढ़ा सर्वर प्रमाण पत्र बी: प्रमाण पत्र सत्यापित करने में विफल क्यों strtok () अनिर्धारित माना जाता है? IE8 और 9 में प्लेसहोल्डर विशेषता का समर्थन कैसे करें बड़ी संख्या के मापांक की गणना कैसे करें?

कैसे बड़ी (1 जीबी) टीसीटीटी फ़ाइल को .net में पढ़ा जा सकता है?

मेरे पास एक 1 जीबी टेक्स्ट फाइल है, जिसे मुझे रेखा से लाइन पढ़ने की जरूरत है I ऐसा करने का सर्वोत्तम और सबसे तेज़ तरीका क्या है?

private void ReadTxtFile() { string filePath = string.Empty; filePath = openFileDialog1.FileName; if (string.IsNullOrEmpty(filePath)) { using (StreamReader sr = new StreamReader(filePath)) { String line; while ((line = sr.ReadLine()) != null) { FormatData(line); } } } } 

FormatData() मैं लाइन के शुरुआती शब्द को FormatData() हूं जिसे एक शब्द के साथ मिलान किया जाना चाहिए और उसके आधार पर एक इंटिजर वैरिएबल बढ़ाना होगा।

 void FormatData(string line) { if (line.StartWith(word)) { globalIntVariable++; } } 

वेब के समाधान से एकत्रित समाधान "कैसे बड़ी (1 जीबी) टीसीटीटी फ़ाइल को .net में पढ़ा जा सकता है?"

यदि आप .NET 4.0 का प्रयोग कर रहे हैं, तो मेमोरीमेपफ़ाइल का प्रयास करें जो कि इस परिदृश्य के लिए एक डिज़ाइन किया गया वर्ग है।

आप StreamReader.ReadLine उपयोग कर सकते StreamReader.ReadLine अन्यथा

StreamReader का उपयोग करना संभवतः ऐसा तरीका है, क्योंकि आप पूरी फ़ाइल स्मृति में एक बार नहीं चाहते हैं। मेमोरीमैपफ़ाइल अनुक्रमिक रीडिंग की तुलना में यादृच्छिक पहुंच के लिए अधिक है (अनुक्रमिक रीडिंग के लिए यह दस गुना तेज है और मेमरी मैपिंग यादृच्छिक पहुंच के लिए दस गुना तेज है)।

आप एक फाइलस्ट्रीम से अपने स्ट्रीम्रीडर को भी बना सकते हैं, जिसमें सेक्वाज़लल स्कैन के साथ FileOptions सेट किया गया है (देखें FileOptions Enumeration ), लेकिन मुझे संदेह है कि यह बहुत अधिक अंतर देगा।

हालांकि आपके उदाहरण को और अधिक प्रभावी बनाने के तरीके हैं, क्योंकि आप पढ़ते हुए उसी लूप में अपना स्वरूपण करते हैं। आप क्लॉकस्किकल बर्बाद कर रहे हैं, इसलिए यदि आप और भी अधिक प्रदर्शन चाहते हैं तो यह एक मल्टीथ्रेडेड अतुल्यकालिक समाधान के साथ बेहतर होगा, जहां एक धागा डेटा और अन्य प्रारूपों को पढ़ता है जैसा कि यह उपलब्ध हो जाता है चेकआउट अवरुद्ध करने की क्रिया जो आपकी आवश्यकताओं को पूरा कर सकती है:

संग्रह अवरुद्ध करना और निर्माता-उपभोक्ता समस्या

यदि आप सबसे तेजी से संभव प्रदर्शन करना चाहते हैं, तो मेरे अनुभव में एकमात्र तरीका बायनरी डेटा के बड़े भाग में क्रमिक रूप से पढ़ना और इसे समानांतर में पाठ में डिसेरीलाइज़ करना है, लेकिन उस समय कोड को जटिल करना शुरू होता है।

आप LINQ का उपयोग कर सकते हैं:

 int result = File.ReadLines(filePath).Count(line => line.StartsWith(word)); 

File.ReadLines एक IEnumerable <String> देता है जो पूरी फ़ाइल मेमोरी में लोड किए बिना फ़ाइल से प्रत्येक पंक्ति को आशंकित करता है।

गणनीय। गणना शब्द से शुरू होने वाली पंक्तियों की गणना करता है।

अगर आप इसे किसी UI थ्रेड से बुला रहे हैं, तो एक पृष्ठभूमिवेर्कर का उपयोग करें

शायद यह रेखा से लाइन को पढ़ने के लिए।

आपको इसे अंत में पढ़ने और फिर प्रसंस्करण के द्वारा इसे स्मृति में बल देने का प्रयास नहीं करना चाहिए।

StreamReader.ReadLine ठीक काम करना चाहिए। ढांचे को बफरिंग चुनने दें, जब तक आप प्रोफ़ाइल के आधार पर नहीं जानते कि आप बेहतर कर सकते हैं

TextReader.ReadLine()

मैं एक बार में फ़ाइल को 10,000 बाइट्स पढ़ा था तब मैं उन 10,000 बाइट्स का विश्लेषण करता हूं और उन्हें लाइनों में काटता हूं और उन्हें स्वरूपडेटा फ़ंक्शन में फ़ीड करता हूं।

एकाधिक धागे पर पढ़ने और रेखा विश्लेषण का विभाजन करने के लिए बोनस अंक।

मैं निश्चित रूप से सभी स्ट्रिंग एकत्र करने के लिए StringBuilder का उपयोग करता हूं और हर समय स्मृति में लगभग 100 तार रखने के लिए स्ट्रिंग बफ़र का निर्माण कर सकता हूं

मुझे बड़ी मात्रा में बड़ी फाइलें (कभी-कभी 10-25 जीबी (\ t) टैब सीमांकित टेस्ट फाइलें) देखते हुए हमारे उत्पादन सर्वर में एक ही समस्या का सामना करना पड़ रहा था। और बहुत सारे परीक्षण और अनुसंधान के बाद मुझे / foreach लूप के साथ बड़ी मात्रा में बड़ी फ़ाइलों को पढ़ने और ऑफसेट और फाइल के साथ सीमा तर्क को व्यवस्थित करने का सबसे अच्छा तरीका मिला। रीडलाइन ()

 int TotalRows = File.ReadLines(Path).Count(); // Count the number of rows in file with lazy load int Limit = 100000; // 100000 rows per batch for (int Offset = 0; Offset < TotalRows; Offset += Limit) { var table = Path.FileToTable(heading: true, delimiter: '\t', offset : Offset, limit: Limit); // Do all your processing here and with limit and offset and save to drive in append mode // The append mode will write the output in same file for each processed batch. table.TableToFile(@"C:\output.txt"); } 

मेरे गिथब लाइब्रेरी में पूरा कोड देखें: https://github.com/Agenty/FileReader/

पूर्ण प्रकटीकरण – मैं एंटी के लिए काम करता हूं, जो इस पुस्तकालय और वेबसाइट के स्वामित्व वाली कंपनी है