फ़ाइल स्ट्रीम क्यों नहीं खोलें और केवल कुछ ही पंक्तियां पढ़ें। आप seek
का उपयोग कर सकते हैं क्योंकि उपयोगकर्ता फ़ाइल में स्क्रॉल करता है और उचित लाइनों को प्रदर्शित करता है। मुद्दा यह है कि - पूरी फ़ाइल को स्मृति में पढ़ने में बहुत समय लगता है इसलिए ऐसा नहीं करें!
स्टार्टर कोड
निम्नलिखित एक छोटी कोड स्निपेट कि पूरा नहीं हुआ है है, लेकिन यह कम से कम आप कार्य आरंभ कर देना चाहिए:
// estimate the average line length in bytes somehow:
int averageLineLengthBytes = 100;
// also need to store the current scroll location in "lines"
int currentScroll = 0;
using (var binaryReader = new StreamReader(new FileStream(fileName, FileAccess.Read)))
{
if (binaryReader.BaseStream.CanSeek)
{
// seek the location to read:
binaryReader.BaseStream.Seek(averageLineLengthBytes * currentScroll, SeekOrigin.Begin);
// read the next few lines using this command
binaryReader.ReadLine();
}
else
{
// revert to a slower implementation here!
}
}
सबसे बड़ी चाल कब तक का आकलन किया जा रहा है स्क्रॉल बार होना चाहिए (फ़ाइल में कितनी लाइनें हैं)। इसके लिए आपको स्क्रॉल बार को बदलना होगा क्योंकि उपयोगकर्ता या स्क्रॉल करता है, आप इस फ़ाइल में कितनी लंबी लाइनें हैं और बाइट्स की कुल संख्या के आधार पर लंबाई का अनुमान लगा सकते हैं। किसी भी तरह से, उम्मीद है कि यह मदद करता है!
एक नोट वर्चुअल मोड के बारे में
आभासी मोड जरूरत आधार के रूप में एक पर आइटम लोड करने के लिए एक ListBox
या इसी तरह की सूची नियंत्रण का उपयोग करने का एक तरीका है। जब उपयोगकर्ता नियंत्रण में स्क्रॉल करता है तो नियंत्रण किसी सूचकांक के आधार पर आइटम पुनर्प्राप्त करने के लिए कॉलबैक निष्पादित करेगा। यह केवल एक व्यवहार्य समाधान है यदि आपका डेटा निम्नलिखित मानदंडों को पूरा करता है:
- आपको उन डेटा आइटम्स की संख्या (सामने) को जानना चाहिए जो आप प्रस्तुत करना चाहते हैं। यदि आपको यह कुल प्राप्त करने के लिए पूरी फ़ाइल को पढ़ने की आवश्यकता है, तो यह आपके लिए काम नहीं करेगा!
- आप पूरी फ़ाइल को पढ़ने के बिना उस आइटम के लिए एक इंडेक्स आधारित एक विशिष्ट डेटा आइटम पुनर्प्राप्त करने में सक्षम होना चाहिए।
- आपको किसी आइकन, छोटे विवरण, विवरण या अन्य समर्थित प्रारूप में डेटा प्रस्तुत करने के लिए तैयार होना चाहिए (या कस्टम सूची दृश्य लिखने के लिए अतिरिक्त कार्य के टन में जाने के इच्छुक होना चाहिए)।
यदि आप इन मानदंडों को पूरा नहीं कर सकते हैं, तो वर्चुअल मोड विशेष रूप से सहायक नहीं होगा। seek
के साथ प्रस्तुत उत्तर इस बात पर ध्यान दिए बिना काम करेगा कि आप इन क्रियाओं को कर सकते हैं या नहीं। बेशक, यदि आप इन न्यूनतम मानदंडों को पूरा कर सकते हैं, तो हर तरह से - सूची दृश्यों के लिए वर्चुअल मोड देखें और आपको कुछ वास्तव में उपयोगी जानकारी मिलनी चाहिए!
स्रोत
2014-05-06 15:14:23
आपने सही नियंत्रण की कोशिश की, लेकिन गलत मोड में। "Winforms ** वर्चुअल मोड **" खोजें (उदाहरण के लिए, सूची बॉक्स)। –
Sinatr