File.X()和Directory.X()方法使用什么Windows API?

时间:2014-01-28 09:59:59

标签: c# performance winapi filesystems

我正在比较Windows GUI与其控制台的速度,而且一些控制台命令实际上更快。使用控制台命令删除包含数千个文件的大文件夹比使用资源管理器中的Shift + Delete快4到10倍。

rmdir "MyLargeDir" /s /q  ---  delete dir tree quietly

我假设Windows GUI和控制台使用不同的API / DLL,也许控制台命令使用遗留代码更快?所以我想知道.NET中的File.Delete()和其他File.X()/ Directory.X()函数使用了哪个Windows API。我真的不知道GUI和控制台使用的API的名称,但 是一个区别,如果性能提升如此重要,我宁愿执行cmd.exe而不是而不是调用Directory.Delete()。

所以我的问题:

  1. 为什么控制台rmdir执行速度比资源管理器快?
  2. 两者使用的Windows API有哪些不同?或者只是需要时间的GUI更新?
  3. 默认的.NET类是使用速度较快的API(如果有的话),还是应该调用cmd.exe以获得最大速度?

3 个答案:

答案 0 :(得分:1)

  

为什么控制台rmdir的执行速度比资源管理器快?

我们无法在不分析这两个应用程序的情况下知道,但考虑到Explorer不仅有一个现场保持更新的GUI,而且还有加载和运行可能决定的第三方代码(shell扩展)为了做任何想做的事,控制台更快就不足为奇了。

  

两者使用的Windows API有哪些不同?

当然there are no different APIs。为这种基本文件操作提供多个API是没有任何意义的。

  

或者只是需要时间的GUI更新?

见第一段。

  

默认的.NET类是使用更快的API(如果有的话),还是应该调用cmd.exe来获得最大速度?

他们使用相同的API,但.NET如何进入这个?您提到了控制台窗口和资源管理器之间的感知性能差异。这些都不是.NET。

答案 1 :(得分:1)

资源管理器使用(或至少用于)SHFileOperation,我认为它在内部使用DeleteFile

命令提示实用程序直接使用DeleteFile

速度差异是由于两者之间的差异(如果您查看API,您会看到第一个更加复杂)。

答案 2 :(得分:-2)

  

为什么控制台rmdir的执行速度比资源管理器快?

在GUI中,Windows首先估计在执行某些操作之前执行某些操作所需的时间。这是显示GUI中剩余时间的必要条件。

命令行不显示剩余时间,因此不必计算它!

我听说过Windows中某些文件从网络驱动器复制到本地硬盘驱动器(或其他方式)中的不良行为:Windows需要超过30分钟来估算所需的时间!复制文件实际需要的时间不到一分钟。这意味着:在这种情况下,使用命令行可以快31倍。