Directory.EnumerateFiles बनाम Directory.GetFiles के बीच अंतर क्या है?


145

Directory.EnumerateFilesबनाम के बीच अंतर क्या है GetFiles?

जाहिर है कि एक ऐरे को लौटाता है और दूसरा एनुमेरबल को।

और कुछ?

जवाबों:


173

से डॉक्स :

EnumerateFiles और GetFiles के तरीके अलग-अलग हैं: जब आप EnumerateFiles का उपयोग करते हैं, तो आप पूरे संग्रह के वापस आने से पहले नामों के संग्रह की गणना शुरू कर सकते हैं; जब आप GetFiles का उपयोग करते हैं, तो आपको सरणी तक पहुंचने से पहले नामों के पूरे सरणी के लिए इंतजार करना होगा। इसलिए, जब आप कई फ़ाइलों और निर्देशिकाओं के साथ काम कर रहे हैं, तो EnumerateFiles अधिक कुशल हो सकते हैं।

इसलिए मूल रूप से, EnumerateFilesवह रिटर्न, IEnumerableजिसका कुछ हद तक आलसी मूल्यांकन किया जा सकता है, जबकि GetFilesवह रिटर्न string[]जो वापस लौटने से पहले पूरी तरह से आबादी होना चाहिए।


5
आलसी मूल्यांकन पूरी तरह से मुक्त होने के लिए नहीं आ सकता है - उदाहरण के लिए यदि आप इसे अंत में एक सरणी में डाल देंगे (मैंने देखा!)। "यज्ञी" होने पर आलसी कुशल होता है -सभी: आपको सभी तत्वों की आवश्यकता नहीं है, और बस कुछ के बाद इसे रोकना है।
टॉमस गैंडर

5
आलसी अभिज्ञान भी दिलचस्प है यदि आप इतने बड़े संग्रह की गणना करने जा रहे हैं जो पूरे संग्रह को पहले मेमोरी में बनाना बहुत भारी है। आप बस आइटम को संसाधित कर सकते हैं जैसे वे आते हैं और उन्हें भूल जाते हैं।
स्टीफन गौरिचोन

1
@TomaszGandor: या जब फ़ाइल का नाम बदलने पर सभी फ़ाइल नाम, जैसे स्टोर करने की कोई आवश्यकता नहीं है।
सेबेस्टियन मच

मैंने स्रोतों पर ध्यान दिया और पाया कि दोनों विधियाँ आंतरिक का उपयोग करती हैं FileSystemEnumerableFactory.CreateFileInfoIterator()। लेकिन EnumerateFiles()इस पुनरावृत्ति को सीधे लौटाता है जबकि इससे GetFiles()अतिरिक्त बनाता Listहै और कॉल करता है ToArray()। इसलिए, यदि आप गति का ध्यान रखते हैं, तो इसका उपयोग करने EnumerateFiles()और अपने आप से चलने वाले से निपटने के लिए समझ में आता है ।
C0DEF52


16

EnumerateFiles का उपयोग करते समय, यदि आप उपयोग कर रहे हैं तो सभी गति खो जाती है .Last। यह निश्चित रूप से समझ में आता है, क्योंकि अंतिम फ़ाइल को प्राप्त करने के लिए, इसे सभी फ़ाइलों को एन्यूमरेट करने की आवश्यकता होगी, फिर पिछले एक को पकड़ो।

हालांकि, इसका उपयोग करना .Firstया .FirstOrDefaultबहुत तेज हो जाता है, क्योंकि यह केवल पहली वस्तु को पकड़ता है और आगे बढ़ता है।


6
इस बहुत पुराने सवाल ने पूछा कि Arrayबनाम Enumerableपहलू के अलावा क्या अंतर थे । आपका उत्तर ऐसी सभी स्थितियों के लिए सामान्य है, लेकिन पूछे गए प्रश्न का उत्तर नहीं देता है।
आशीगोर

2
मुद्दा यह है, EnumerateFiles आपको कुछ मामलों में, डेटा को त्वरित रूप से एक्सेस करना शुरू कर देता है।
स्कोट्टे

16
मुद्दा यह है, यह एक टिप्पणी के रूप में बहुत उपयोगी है लेकिन यह सवाल का जवाब नहीं देता है। एक भेद है।
djv
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.