我刚刚读了一页"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