2013-06-03 30 views
0

正如標題所示,以下哪種情況會更快?FileInfo.Exists/Copy比File快嗎?

 // Using FileInfo 
     FileInfo file = new FileInfo(@"C:\Test.txt"); 

     if (file.Exists) 
      file.CopyTo(@"C:\TestCopy.txt"); 

     // Using File 
     if (File.Exists(@"C:\Test.txt")) 
      File.Copy(@"C:\Test.txt", @"C:\TestCopy.txt"); 

我知道FileInfo更易於閱讀,但其中一種方法比另一種更快嗎?

+0

您是否試圖爲您的案例編寫基準? – Romoku

+0

寫小測試並分享結果 – Mzf

+4

請參閱:http://stackoverflow.com/questions/1324788/what-is-the-difference-between-file-and-fileinfo-in-c。 YMMV,並且將取決於你的具體用例,因此按其他人的建議進行基準測試可能是找出問題的最佳方法。 –

回答

3

不同之處在於FileInfo緩存信息:文件現有的檢查被執行一次。 然後,如果您檢查Exists屬性,然後創建文件,對Exists屬性的新調用將始終返回false。

+0

這是真的,但請注意,文件存在檢查是懶惰執行的。 –

+0

@MthetheWWatson怎麼樣?進一步的解釋將不勝感激! – SepehrM

+1

@SepehrM我的意思是'FileInfo.Exists'的內部bool字段不是由'FileInfo'構造函數初始化的。相反,它在您第一次調用FileInfo.Exists時進行初始化。 (你可以通過使用Reflector或類似方法來檢查實現來查看。) –