हो पर निर्भर करता है कई बार आप 'खोज' करना चाहते हैं, आप एक खोज इंजन का उपयोग करना चाहते हैं या नहीं। यदि आप कई बार खोजना चाहते हैं, तो एक खोज इंजन का उपयोग करें, अन्यथा: नहीं। मैं वर्णन कर रहा हूं कि दोनों परिदृश्यों को कैसे कार्यान्वित किया जाए।
एक खोज इंजन का उपयोग करते समय: ऐसा लगता है कि आप सबस्ट्रिंग की तलाश में हैं, जिसका अर्थ है कि आपको अपनी पसंदीदा खोज इंजन का उपयोग करके अपनी फाइलों को इंडेक्स करना चाहिए, अधिमानतः आप अनुकूलित कर सकते हैं (ल्यूसीन, टेरियर, इत्यादि)। आपको जिस तकनीक की आवश्यकता है वह ट्रिगर को इंडेक्स करना है, यानी: सभी 3-वर्ण संयोजनों को अनुक्रमित करना होगा। एफएक्स .: 'foobar' 'foo', 'oob', 'oba' और 'bar' उत्पन्न करेगा। खोज करते समय, आप अपनी क्वेरी के साथ ऐसा करना चाहते हैं और इन सभी ट्रिग्राम के साथ एक खोज इंजन क्वेरी जारी करना चाहते हैं। (यह दस्तावेजों से पोस्टिंग सूचियों पर विलय-जुड़ाव चलाएगा, जो उनकी आईडी या जो भी आप पोस्टिंग सूचियों में डाल देंगे) वापस कर देंगे।
वैकल्पिक रूप से, आप प्रत्यय सरणी लागू कर सकते हैं और एक बार अपनी फाइलों को इंडेक्स कर सकते हैं। यदि आप शॉर्ट (1-2 चार) सबस्ट्रिंग्स खोजना चाहते हैं तो इससे थोड़ा अधिक लचीलापन मिलेगा, लेकिन इंडेक्स के संदर्भ में बनाए रखना मुश्किल है।
आप केवल कुछ ही बार खोज करने के लिए चाहते हैं, तो एल्गोरिथ्म का उपयोग करने के लिए या तो बोयर-मूर (मैं आमतौर पर बोयर-मूर-रविवार का उपयोग में वर्णित है (तेजी से अनुक्रमण प्रत्यय सरणियों के लिए CWI/एम्स्टर्डम में कुछ शोध भी नहीं है) [ग्राहम ए स्टीफन, स्ट्रिंग सर्च]) या एक संकलित डीएफए (आप उन्हें एनएफए से बना सकते हैं, जो बनाना आसान है)। हालांकि, यह आपको केवल एक छोटी गति वृद्धि देगा, सरल कारण यह है कि डिस्क आईओ शायद आपकी बाधा है और बाइट्स का एक गुच्छा की तुलना करना है जिसे आपको किसी भी तरह से डीकोड करने की आवश्यकता है।
सबसे बड़ा सुधार जो आप कर सकते हैं वह लाइन द्वारा आपकी फ़ाइल लाइन नहीं पढ़ रहा है, बल्कि ब्लॉक में। 64 KB के ब्लॉक आकार का उपयोग करने के लिए आपको NTFS को कॉन्फ़िगर करना चाहिए यदि आप 64 KB के गुणों में फ़ाइलों को पढ़ और पढ़ सकते हैं - एक ही पढ़ने में 4 एमबी या अधिक सोचें। मैं एसिंक्रोनस आईओ का उपयोग करने का सुझाव भी दूंगा ताकि आप एक ही समय में पढ़ और संसाधित कर सकें (पहले डेटा पढ़ सकते हैं)। यदि आप इसे सही तरीके से करते हैं, तो आपको पहले से ही अधिकांश आधुनिक हार्डवेयर पर 10 एमबी के लिए एक अलग-अलग कार्यान्वयन देना चाहिए।
अंतिम लेकिन कम से कम नहीं, जानकारी की पुनर्प्राप्ति के दौरान उपयोग की जाने वाली एक साफ चाल भी तेज़ संपीड़न एल्गोरिदम का उपयोग करके डेटा को संपीड़ित करने के लिए है। चूंकि डिस्क IO स्मृति/cpu संचालन से धीमा है, यह शायद भी मदद करेगा। Google का स्नैपी कंप्रेसर एक तेज संपीड़न एल्गोरिदम का एक अच्छा उदाहरण है।
आपकी मंदी शायद फाइल लाइन को लाइन से पढ़ने से आती है। एक बार सभी को स्मृति में एक फ़ाइल पढ़ें और उसे खोजें। – dda
http://stackoverflow.com/questions/4289353/fastest-way-to-search-ascii-files-in-c-sharp-for-simple-keywords – Ofiris
क्या आपको एक ही फाइल पर कई बार खोज करने की आवश्यकता है? – user626528