मैं निर्देशिका आकारों की गणना करने की कोशिश कर रहा हूं जो लोड को विभाजित करता है ताकि उपयोगकर्ता गिनती प्रगति देख सके। मैंने सोचा कि ऐसा करने का एक तार्किक तरीका सबसे पहले निर्देशिका पेड़ बनाना होगा, फिर सभी फ़ाइलों की लंबाई गिनती एक ऑपरेशन करें।निर्देशिका आकारों की गणना
अप्रत्याशित रूप से मेरे लिए जो चीज आती है वह यह है कि समय (डिस्क I/O) निर्देशिका वृक्ष बनाने से आता है, तो FileInfo[]
पर जाकर लगभग तुरंत डिस्क I/O के साथ आता है।
मैं तुलना में दोनों Directory.GetDirectories()
साथ की कोशिश की है, बस निर्देशिका नाम के तार का एक वृक्ष बनाने, और एक DirectoryInfo
वस्तु का उपयोग कर, और दोनों तरीकों अभी भी मैं/हे समय के थोक (पढ़ने निश्चित रूप से MFT) ले प्रत्येक निर्देशिका में फ़ाइलों के लिए सभी FileInfo.Length
पर जाने के लिए।
मुझे लगता है कि पेड़ को महत्वपूर्ण बनाने के लिए I/O को कम करने का कोई तरीका नहीं है, मुझे लगता है कि मैं सोच रहा हूं कि इस ऑपरेशन को और अधिक फ़ाइलों पर जाने की तुलना में काफी अधिक समय क्यों लगता है?
इसके अलावा, यदि कोई भी चीजों को टैली करने के लिए एक गैर-पुनरावर्ती तरीका की सिफारिश कर सकता है (क्योंकि ऐसा लगता है कि मुझे गणना को विभाजित करने और आकार को संतुलित करने की आवश्यकता है ताकि आकार अधिक प्रतिक्रियाशील हो सके)। आधार से प्रत्येक उपनिर्देशिका के लिए धागा बनाना और शेड्यूलर प्रतिस्पर्धा संतुलन की चीजों को देना संभवतः बहुत अच्छा नहीं होगा, है ना?
संपादित करें: Repository for this code
मैंने निर्देशिका आकार की गणना के साथ भी संघर्ष किया है। मैंने ठीक किया है जो आपने किया है। कोशिश की> fileInfo [] और फिर> Directory.GetDirectories()। लेकिन मुझे अभी भी किसी भी बेहतर तरीके से पता नहीं है। –
आप कह रहे हैं कि GetDirectories() को कॉल करना काफी समय लगता है? मैंने इसे नहीं देखा है लेकिन फिर से, मैंने कभी भी बड़ी संख्या में निर्देशिकाओं के साथ ऐसा नहीं किया है। इसके अलावा, अगर आप इसकी रिकर्सिव परवाह करते हैं तो आप परवाह क्यों करेंगे? यह एक पुनरावर्ती कार्य है और आप कभी भी इतनी घोंसला वाली निर्देशिका नहीं कर पाएंगे कि आप ढेर को उड़ा देंगे। –
देखें http://stackoverflow.com/questions/468119/whats-the-best-way-to-calculate-the-size-of-a-directory-in-net –