Directory.EnumerateFiles
與GetFiles
有什麼區別?Directory.EnumerateFiles與Directory.GetFiles有什麼區別?
很明顯,一個返回一個數組,另一個返回Enumerable。
還有其他嗎?
Directory.EnumerateFiles
與GetFiles
有什麼區別?Directory.EnumerateFiles與Directory.GetFiles有什麼區別?
很明顯,一個返回一個數組,另一個返回Enumerable。
還有其他嗎?
從the docs:
的EnumerateFiles和GetFiles的方法的區別如下:當您使用EnumerateFiles,你可以返回整個集合之前開始枚舉名稱的集合;當您使用GetFiles時,您必須等待返回數組之前返回整個名稱數組。因此,當您使用許多文件和目錄時,EnumerateFiles可以更高效。
所以基本上,EnumerateFiles
返回IEnumerable
它會有所評價懶惰,而GetFiles
返回string[]
必須被完全填充它可以返回之前。
EnumerateFiles
返回IEnumerable<string>
這意味着推遲執行。它僅在Fx4及更高版本中可用。
使用EnumerateFiles時,如果您使用.Last
,則所有速度都會丟失。這當然是有道理的,因爲要到達最後一個文件,它需要枚舉所有文件,然後抓取最後一個文件。
但是,使用.First
或.FirstOrDefault
變得非常快,因爲它只是抓取第一個項目並繼續前進。
懶惰評估可能不會完全免費 - 例如,如果你最終將它放回數組中(我看到了!)。當「yagni」-all時,懶惰效率很高 - 你不需要所有的元素,並且在幾個之後停止迭代。 – 2013-04-03 15:16:39
如果你打算枚舉一個如此龐大的集合,那麼首先在內存中構建整個集合過於沉重,那麼懶惰枚舉也很有趣。您可以隨時處理這些物品,並忘記它們。 – 2016-01-07 18:49:42
@TomaszGandor:或者當不需要存儲所有文件名時,例如當重命名文件時。 – 2018-01-04 09:21:48