मुझे स्टार्टअप पर कई हजार छोटी फ़ाइलों की सामग्री को पढ़ने की आवश्यकता है। लिनक्स पर, केवल फॉपेन और रीडिंग का उपयोग करना बहुत तेज़ है। विंडोज़ पर, यह बहुत धीरे-धीरे होता है।CreateFile को जितनी जल्दी हो सके
मैंने ReadFileEx का उपयोग करके ओवरलैप्ड I/O (असिंक्रोनस I/O) का उपयोग करने के लिए स्विच किया है, जहां डेटा पढ़ने के लिए तैयार होने पर विंडोज कॉलबैक करता है।
हालांकि, CreateFile के लिए वास्तविक हजारों कॉल अभी भी एक बाधा हैं। ध्यान दें कि मैं अपने स्वयं के बफर की आपूर्ति करता हूं, NO_BUFFERING ध्वज चालू करता हूं, सीरियल संकेत देता हूं, आदि। हालांकि, CreateFile के कॉल कई 10 सेकंड लेते हैं, जबकि लिनक्स पर सबकुछ बहुत तेज होता है।
क्या इन फ़ाइलों को और अधिक तेज़ी से पढ़ने के लिए तैयार करने के लिए कुछ भी किया जा सकता है?
CreateFile करने के लिए कॉल है:
hFile = CreateFile(szFullFileName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
यह संभव है कि बाधा फाइल सिस्टम है, क्या हजारों छोटी फ़ाइलों को पढ़ने के बजाय एक फ्लैट फ़ाइल का उपयोग करना संभव है? – tenfour
विंडोज़ एक निर्देशिका में बड़ी संख्या में फाइलों से निपटने में कुख्यात रूप से खराब है, अगर यह आपका मामला है। क्या चीज को एक विकल्प मल्टीथ्रेड कर रहा है, तो आपके पास 10 धागे कंसूर में पढ़ रहे हैं? – eran
आपको इस प्रश्न पर एक नज़र रखना चाहिए http://stackoverflow.com/questions/197162/ntfs-performance-and-large-volumes-of-files-and- निर्देशिकाएं –