我剛剛讀了一頁"Whats new .NET Framework 4.0"。我聽不太懂的最後一段:.NET 4.0文件系統枚舉功能的奇怪之處
要在列舉的目錄或文件
創建一個自定義的方法(或Visual Basic功能)包含 您的枚舉代碼刪除打開的句柄。
將MethodImplAttribute屬性與無內插選項 一起應用於新方法。例如:
[MethodImplAttribute(MethodImplOptions.NoInlining)]
Private void Enumerate()
包括以下幾個方法調用,您枚舉 代碼後運行:
* The GC.Collect() method (no parameters). * The GC.WaitForPendingFinalizers() method.
爲什麼屬性NoInlining?內聯會造成什麼危害?
爲什麼不手動調用垃圾回收器,爲什麼不讓枚舉器首先實現IDisposable?我懷疑他們使用FindFirstFile()/ FindNextFile()API調用imlementation,因此如果枚舉完成,則必須在任何情況下調用FindClose()。
編輯:
沒有任何人有一個想法,爲什麼NoInlining屬性建議的文章?
哇。我並不希望在MSDN的建議中看到* * * – 2010-04-18 19:34:23
我很驚訝地看到這一點,但請注意文章中列出的特殊情況:「如果您運行的是Windows XP或更早版本,則刪除如果在枚舉的目錄或文件之一上存在打開的句柄,則枚舉之後的文件或目錄上的操作可能會失敗,如果發生這種情況,則必須引發垃圾回收來移除打開的句柄。 – 2010-04-18 19:44:51
@布萊恩 - 如果它只適用於XP我滿足...... ish。 – 2010-04-18 19:59:28