Sự khác biệt giữa Directory.EnumerateFiles
vs là GetFiles
gì?
Rõ ràng một trả về một mảng và trả về một mảng khác.
Còn gì nữa không?
Sự khác biệt giữa Directory.EnumerateFiles
vs là GetFiles
gì?
Rõ ràng một trả về một mảng và trả về một mảng khác.
Còn gì nữa không?
Câu trả lời:
Từ các tài liệu :
Các phương thức Enum CảFiles và GetFiles khác nhau như sau: Khi bạn sử dụng Enum CảFiles, bạn có thể bắt đầu liệt kê bộ sưu tập tên trước khi trả lại toàn bộ bộ sưu tập; Khi bạn sử dụng GetFiles, bạn phải đợi toàn bộ mảng tên được trả về trước khi bạn có thể truy cập vào mảng. Do đó, khi bạn đang làm việc với nhiều tệp và thư mục, Enum CảFiles có thể hiệu quả hơn.
Về cơ bản, EnumerateFiles
trả về một IEnumerable
cái có thể được đánh giá một cách lười biếng phần nào, trong khi GetFiles
trả về một string[]
cái phải được điền đầy đủ trước khi nó có thể trở lại.
FileSystemEnumerableFactory.CreateFileInfoIterator()
. Nhưng EnumerateFiles()
trả về trình lặp này trực tiếp trong khi GetFiles()
xây dựng thêm List
từ nó và các cuộc gọi ToArray()
. Vì vậy, nếu bạn quan tâm đến tốc độ thì nên sử dụng EnumerateFiles()
và tự mình đối phó với trình vòng lặp.
EnumerateFiles
trả về IEnumerable<string>
và điều đó hàm ý thực hiện hoãn lại. Nó chỉ có sẵn trong Fx4 trở lên.
Khi sử dụng Enum CảFiles, tất cả tốc độ sẽ bị mất nếu bạn đang sử dụng .Last
. Điều này có ý nghĩa tất nhiên, bởi vì để đến tệp cuối cùng, nó sẽ cần liệt kê tất cả các tệp, sau đó lấy tệp cuối cùng.
Tuy nhiên, sử dụng .First
hoặc .FirstOrDefault
trở nên rất nhanh, bởi vì nó chỉ đơn giản là lấy vật phẩm đầu tiên và tiếp tục.
Array
vs. Enumerable
Câu trả lời của bạn là chung cho tất cả các tình huống như vậy nhưng không trả lời câu hỏi được hỏi.