Apa perbedaan antara Directory.EnumerateFiles
vs GetFiles
?
Jelas satu mengembalikan array dan yang lainnya mengembalikan Enumerable.
Ada yang lain?
Dari dokumen :
Metode EnumerateFiles dan GetFiles berbeda sebagai berikut: Ketika Anda menggunakan EnumerateFiles, Anda bisa mulai menghitung kumpulan nama sebelum seluruh koleksi dikembalikan; ketika Anda menggunakan GetFiles, Anda harus menunggu seluruh array nama dikembalikan sebelum Anda dapat mengakses array. Oleh karena itu, ketika Anda bekerja dengan banyak file dan direktori, EnumerateFiles dapat lebih efisien.
Jadi pada dasarnya, EnumerateFiles
mengembalikan IEnumerable
yang dapat dievaluasi agak malas, sedangkan GetFiles
mengembalikan string[]
yang harus diisi penuh sebelum dapat kembali.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. TetapiEnumerateFiles()
mengembalikan iterator ini secara langsung sementaraGetFiles()
membangun ekstraList
dari itu dan panggilanToArray()
. Jadi, jika Anda peduli kecepatan, masuk akal untuk menggunakanEnumerateFiles()
dan menangani iterator sendiri.EnumerateFiles
kembaliIEnumerable<string>
dan itu menyiratkan eksekusi yang ditangguhkan. Ini hanya tersedia di Fx4 dan lebih tinggi.sumber
Saat menggunakan EnumerateFiles, semua kecepatan hilang jika Anda menggunakannya
.Last
. Ini masuk akal tentu saja, karena untuk sampai ke file terakhir, perlu untuk menghitung semua file, lalu ambil yang terakhir.Namun, menggunakan
.First
atau.FirstOrDefault
menjadi sangat cepat, karena hanya mengambil item pertama dan bergerak.sumber
Array
vs.Enumerable
Jawaban Anda bersifat umum untuk semua situasi seperti itu tetapi tidak menjawab pertanyaan yang diajukan.