ডিরেক্টরি.গুনফলক বনাম ডিরেক্টরি.গেটফাইলসের মধ্যে পার্থক্য কী?


145

Directory.EnumerateFilesবনাম মধ্যে পার্থক্য কি GetFiles?

স্পষ্টতই একটির একটি অ্যারে এবং অন্যটি প্রত্যাবর্তনযোগ্য ফেরত দেয়।

আর কিছু?

উত্তর:


173

ডক্স থেকে :

নিম্নরূপে EnumerateFiles এবং GetFiles পদ্ধতিগুলি পৃথক: আপনি যখন EnumerateFiles ব্যবহার করেন, পুরো সংগ্রহটি ফিরে আসার আগে আপনি নাম সংগ্রহের গণনা শুরু করতে পারেন; যখন আপনি গেটফাইলগুলি ব্যবহার করেন, অ্যারে অ্যাক্সেস করার আগে আপনাকে অবশ্যই পুরো পুরো অ্যারেটি ফিরে আসার অপেক্ষা করতে হবে। অতএব, আপনি যখন অনেকগুলি ফাইল এবং ডিরেক্টরি নিয়ে কাজ করছেন তখন এনুমারেট ফাইলগুলি আরও দক্ষ হতে পারে।

সুতরাং মূলত, এমন EnumerateFilesএকটি রিটার্ন দেয় IEnumerableযা অলসভাবে কিছুটা মূল্যায়ন করা যায়, আবার কোনওটি GetFilesফিরে আসে string[]যা এটি ফিরে আসার আগে পুরোপুরি জনবসতিপূর্ণ হতে হয়।


5
অলস মূল্যায়ন সম্পূর্ণ নিখরচায় নাও আসতে পারে - উদাহরণস্বরূপ যদি আপনি এটিকে শেষের দিকে অ্যারেতে ফিরিয়ে রাখবেন (আমি তা দেখেছি!)। "ইয়াগনি" -আলসি দক্ষ - সমস্ত আপনার প্রয়োজন হবে না, এবং কিছু পরে পুনরাবৃত্তি থামাতে হবে।
টমসজ গেন্ডার

5
অলস গণনাটিও আকর্ষণীয় যদি আপনি এত বড় সংগ্রহটি গণনা করতে চলেছেন যে মেমরিতে প্রথমে পুরো সংগ্রহটি তৈরি করা খুব ভারী। আপনি আইটেমগুলি আসার সাথে সাথে কেবল তাদের প্রক্রিয়া করতে এবং সেগুলি ভুলে যেতে পারেন।
স্টাফেনি গৌরিচন

1
@ টমাসজান্ডার: বা যখন সমস্ত ফাইলের নাম সংরক্ষণ করার দরকার নেই, যেমন কেবল ফাইলের নাম পরিবর্তন করার সময়।
সেবাস্তিয়ান মাচ

আমি উত্সগুলি ঘুরে দেখলাম যে উভয় পদ্ধতিই অভ্যন্তরীণ ব্যবহার করে FileSystemEnumerableFactory.CreateFileInfoIterator()। কিন্তু এটি থেকে অতিরিক্ত তৈরি করে এবং কল করার EnumerateFiles()সময় সরাসরি এই পুনরাবৃত্তিকে ফেরত দেয় । সুতরাং, আপনি যদি গতির যত্ন নিয়ে থাকেন তবে এটি নিজের ব্যবহার এবং পুনরুক্তিকারীর সাথে নিজেকে মোকাবিলা করার জন্য বোধগম্য । GetFiles()ListToArray()EnumerateFiles()
C0DEF52

32

EnumerateFilesপ্রত্যাবর্তন IEnumerable<string>এবং এটি স্থগিত কার্যকর করা বোঝায়। এটি কেবলমাত্র Fx4 এবং তারপরেই উপলব্ধ।


2
Fx4 এর অর্থ কী?
মিনহ এনগুইন

3
। নেট ফ্রেম ওয়ার্ক 4
হেন্ক

11
যে .NET 4.0 একটি অস্বাভাবিক নাম
Snak

16

EnumerateFiles ব্যবহার করার সময়, আপনি যদি তখন ব্যবহার করেন তবে সমস্ত গতি নষ্ট হবে .Last। এটি অবশ্যই বোঝায়, কারণ শেষ ফাইলটি পেতে, এটি সমস্ত ফাইলগুলি গণনা করতে হবে, তারপরে সর্বশেষটি ধরে ফেলবে।

তবে, ব্যবহার করা .Firstবা .FirstOrDefaultখুব দ্রুত হয়ে ওঠে, কারণ এটি কেবল প্রথম আইটেমটি ধরে এবং এগিয়ে যায়।


6
এই খুব পুরানো প্রশ্নটি জিজ্ঞাসা করেছিল যে Arrayবনাম Enumerableদিকটি বাদ দিয়ে কি পার্থক্য রয়েছে । আপনার উত্তর এই জাতীয় সমস্ত পরিস্থিতিতে জেনেরিক তবে জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না।
আশিগোর

2
মুল বক্তব্যটি হ'ল এনিউমারেটফাইলস আপনাকে কিছু ক্ষেত্রে দ্রুত ডেটা অ্যাক্সেস শুরু করতে দেয়।
স্কটি

16
মুল বক্তব্যটি, এটি একটি মন্তব্য হিসাবে খুব দরকারী তবে এটি প্রশ্নের উত্তর দেয় না। একটি পার্থক্য আছে।
ডিজেভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.