Apa perbedaan antara Directory.EnumerateFiles
vs GetFiles
?
Jelas satu mengembalikan array dan yang lainnya mengembalikan Enumerable.
Ada yang lain?
Apa perbedaan antara Directory.EnumerateFiles
vs GetFiles
?
Jelas satu mengembalikan array dan yang lainnya mengembalikan Enumerable.
Ada yang lain?
Jawaban:
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()
. Tetapi EnumerateFiles()
mengembalikan iterator ini secara langsung sementara GetFiles()
membangun ekstra List
dari itu dan panggilan ToArray()
. Jadi, jika Anda peduli kecepatan, masuk akal untuk menggunakan EnumerateFiles()
dan menangani iterator sendiri.
EnumerateFiles
kembali IEnumerable<string>
dan itu menyiratkan eksekusi yang ditangguhkan. Ini hanya tersedia di Fx4 dan lebih tinggi.
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.
Array
vs. Enumerable
Jawaban Anda bersifat umum untuk semua situasi seperti itu tetapi tidak menjawab pertanyaan yang diajukan.