पिछले जवाब इस्तेमाल किया Directory.EnumerateFiles() जो है, जबकि सूची का निर्माण किया जा रहा है आप फ़ाइलों की सूची पर कार्रवाई पर ले जाने के लिए अनुमति देता है के इस जवाब से कोई भी लिखने के समय
। कोड:
Parallel.ForEach(Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).AsParallel(), Item =>
{
if(!string.Equals(Path.GetExtension(Item), ".zip",StringComparison.OrdinalIgnoreCase))
File.Delete(Item);
});
जहां तक मैं AsParallel का उपयोग करने से प्रदर्शन लाभ पता है() महत्वपूर्ण नहीं होना चाहिए (यदि पाया जाता है) इस मामले में हालांकि यह मेरे मामले में फर्क किया था।
मैंने 4689 फाइलों की सूची में सभी .zip फ़ाइलों को हटाने के लिए जितना समय निकाला है, उनमें से 10 की तुलना में ज़िप फाइलें थीं। 2-समानांतर foreach। 3-IEnumerable()। AsParallel()। Forall। आईन्यूमेरेबल()। AsParallel() का उपयोग करके 4-समांतर फोरैच ऊपर दिखाए गए अनुसार। परिणाम:
1-1545
2-1015
3-1103
4-839
पांचवें और आखिरी मामला एक सामान्य foreach Directory.GetFiles का उपयोग कर (था)
5-2266
बेशक परिणाम निर्णायक नहीं थे, जहां तक मुझे उचित बेंचमार्किंग करने के बारे में पता है, आपको एचडीडी की बजाय रैम ड्राइव का उपयोग करने की आवश्यकता है।
नोट: कि एन्युमेरेटफाइल और गेटफाइल के बीच प्रदर्शन अंतर अधिक स्पष्ट हो जाता है क्योंकि फाइलों की संख्या बढ़ जाती है।
स्रोत
2013-08-29 14:00:22
आप इसमें कौन सी भाषा/ओएस कर रहे हैं? – Eli
मुझे लगता है कि सी #/LINQ टैग पर्याप्त हैं @Eli – Marko
LINQ किसी भी अन्य विधि की तुलना में तेज़ नहीं होगा; इसे अभी भी फाइलों को किसी भी तरह से गिनना है। बाधा आपकी डिस्क है, अनुरोध भेजने के लिए जिम्मेदार कोड नहीं है। –