托管代码很慢是一个相当普遍的误解。通常不是,您执行的代码与 C 编译器生成的代码相同,即机器代码。它与作为操作系统功能包装器的大量 .Net 框架类尤其不相关。
就像 File 类一样。File.Delete() 方法实际上调用了 DeleteFile() winapi 函数。必然如此,这是在 Windows 上删除文件的唯一方法。.NET 框架无能为力,至少在托管操作系统可用之前是这样。这可能有一天会发生,微软的超级秘密 Midori 项目旨在开发这样一个操作系统。
但那是未来的音乐,现在它是一大块 C 代码,埋在像 Fat32 或 NTFS 这样的文件系统驱动程序中,实际上可以完成工作。它以磁盘速度运行,DeleteFile() 在文件系统驱动程序确认删除完成之前不会返回。这是非常非常缓慢的。就像老式硬盘驱动器的大约 50 毫秒,SSD 的亚毫秒范围内一样。
File.Delete()确实添加了代码,它执行了大量的错误检查。如果验证您传递的参数不为空,则检查您的代码是否未在拒绝删除文件的沙箱中运行,检查您是否未在路径中指定任何文件路径中不合法的字符,将增量路径转换为完整路径并检查它是否仍然是合法路径,检查路径字符串是否不太长,如有必要,将短 MS-Dos 8.3 名称转换为长名称。
这是一堆工作,但以微秒为单位。如果您 pinvoke DeleteFile,那么您将跳过该代码,但充其量只会使其速度提高约 1%。您将失去的是可靠性,即如果您的代码或数据中有 oops,您将被告知的保证。带有非常清晰的异常消息,可以准确地告诉您出了什么问题。非常有价值,因为这几微秒乘以十亿仍然无法与调试不起作用的 DeleteFile() 所花费的时间和痛苦相提并论。
不要这样做。