有效计数目录和子文件夹中具有特定名称的文件

时间:2019-01-16 11:21:02

标签: performance powershell cmd

我可以计算一个文件夹和子文件夹中的所有文件,不计算文件夹本身。

(gci -Path *Fill_in_path_here* -Recurse -File | where Name -like "*STB*").Count

但是,对于文件数量(最多700k),powershell太慢。我读到cmd可以更快地执行此类任务。

不幸的是,我一点都不了解cmd代码。在上面的示例中,我计算了所有文件名中带有STB的文件。

这也是我想在cmd中执行的操作。

感谢您的帮助。

6 个答案:

答案 0 :(得分:3)

cmd命令行或批处理文件中最快的方法之一可能是

dir "x:\some\where\*stb*" /s /b /a-d | find /c /v ""

只需递归(/sdir命令即可​​列出所有格式为/a-d的文件(无文件夹/b),所有输出通过管道传递到find命令,该命令将计算(/c)非空行(/v "")的数量

但是,无论如何,您都需要枚举文件,这需要时间。

已编辑以适应评论,但

注释以下方法不适用于这种情况,因为至少在Windows 10中,dir命令的摘要行中的空格填充设置为五个位置。大于99999的文件计数未正确填充,因此sort /r输出不正确。

正如Ben Personick所指出的,dir命令还输出文件数,我们可以检索以下信息:

@echo off
    setlocal enableextensions disabledelayedexpansion

    rem Configure where and what to search
    set "search=x:\some\where\*stb*"

    rem Retrieve the number of files
    set "numFiles=0"
    for /f %%a in ('
        dir "%search%" /s /a-d /w 2^>nul        %= get the list of the files        =%
        ^| findstr /r /c:"^  *[1-9]"            %= retrieve only summary lines      =%
        ^| sort /r 2^>nul                       %= reverse sort, greater line first =%
        ^| cmd /e /v /c"set /p .=&&echo(!.!"    %= retrieve only first line         =%
    ') do set "numFiles=%%a"

    echo File(s) found: %numFiles% 

基本思想是使用一系列管道命令来处理数据检索的不同部分:

  • 使用dir命令生成文件列表(包含/w只是为了减少行数)。
  • 由于我们只希望带有找到的文件数量的摘要行,因此findstr仅用于检索以空格开头(标题/摘要行)和大于0的数字(文件计数摘要行,当我们使用/a-d时,目录计数摘要行的值为0)。
  • 以相反的顺序对行进行排序,以大行优先结束(摘要行的开头是一个左空格填充的数字)。第一行是较大的行(最终文件数或等效的行)。
  • 在单独的set /p实例中使用cmd命令仅检索此行。由于完整序列包装在for /f中,并且在从命令执行中检索长列表时存在性能问题,因此我们将尝试尽可能少地检索。

for /f将标记检索到的行,获取第一个标记(文件数),并设置用于保存数据的变量(变量已初始化,有可能找不到文件)。

答案 1 :(得分:2)

如果您将filter直接包含在command中,而不是过滤比预先过滤的命令大得多的命令result set,则可以使用PowerShell加快处理速度。

尝试一下:

(Get-ChildItem -Path "Fill_in_path_here" -Recurse -File -Include "*STB*").Count

答案 2 :(得分:2)

基于直接使用.NET [System.IO.Directory]::EnumerateFiles())的

Theo's helpful answer最快的选择(在我的测试中; YMMV-请参见基准下面的代码 [1] )。

.NET Framework(FullCLR)中的限制-构建 Windows PowerShell 的基础上:

  • 遇到不可访问的目录(由于缺少权限)而引发例外。您可以捕获异常,但是您不能继续枚举;也就是说,您不能完全枚举您可以 访问的所有项目,而忽略了那些您不能访问的项目。

  • 总是包含隐藏的项目。

  • 通过递归枚举,始终会遵循目录的符号链接/结点。

相比之下,跨平台的.NET Core 框架自v2.1 开始-在其上 PowerShell Core 是内置的-通过EnumerationOptions选项克服了这些限制-有关示例,请参见this answer

请注意,您也可以通过相关的[System.IO.DirectoryInfo]类型执行枚举-与Get-ChildItem类似-返回 rich objects 而不是仅仅路径字符串,为通用处理留出了很多空间;例如,要获取所有文件大小的数组(属性.Length,隐式应用于每个文件对象):

([System.IO.DirectoryInfo] $somePath).EnumerateFiles('*STB*', 'AllDirectories').Length

解决这些限制并且仍然相当快 PowerShell本地解决方案是将Get-ChildItem -Filter参数一起使用< / strong>。

(Get-ChildItem -LiteralPath $somePath -Filter *STB* -Recurse -File).Count
  • 默认情况下,排除了隐藏的项目;添加-Force以包括它们。

  • 要忽略权限问题,请添加-ErrorAction SilentlyContinue-ErrorAction IgnoreSilentlyContinue的优点是您以后可以检查$Error集合以确定发生的特定错误,从而确保这些错误确实仅源于权限问题。

  • Windows PowerShell 中,不幸的是Get-ChildItem -Recurse 跟随符号链接/结点到目录;更明智的是,PowerShell Core 默认情况下不会 ,并通过-FollowSymlink提供 opt-in

  • 与基于[System.IO.DirectoryInfo]的解决方案类似,Get-ChildItem输出丰富的对象[System.IO.FileInfo] / [System.IO.DirectoryInfo]),描述每个枚举的文件,系统项,允许进行通用处理。

请注意,虽然您也可以将通配符传递给-Path(隐含的第一个位置参数)和-Include(如TobyU's answer),但它仅是{{1 }}提供 由于在源头过滤了(文件系统驱动程序),因此速度显着提高 ,因此PowerShell仅接收已过滤的结果; 相反,-Filter / -Path必须首先枚举所有内容,然后再匹配通配符模式 [2]

注意事项-Include的使用

  • 它的通配符语言与PowerShell的通配符语言不相同;值得注意的是,它不支持字符集/范围(例如-Filter),并且具有遗留的古怪之处-请参见this answer
  • 它仅支持单个通配符模式,而*[0-9]支持多个(作为数组)。

也就是说,-Include处理通配符的方式与-Filter的{​​{1}}相同。


最后,为了完整起见,您可以基于 cmd.exe的{​​{1}}命令改编MC ND's helpful answer以在PowerShell中使用,从而简化了事情:

dir

PowerShell将外部程序的stdout输出捕获为一行行,您可以简单地使用cmd.exe(或dir)属性查询其元素计数。

也就是说,根据过滤方案的不同,该可能会或可能不会比PowerShell自己的(cmd /c dir /s /b /a-d "$somePath/*STB*").Count 更快。还应注意,.Count只能返回路径字符串,而.Length返回的富对象可以查询其属性。

注意事项Get-ChildItem -Filter的使用

  • dir /s排除目录,即仅报告文件,但还包括隐藏的文件,Get-ChildItem默认情况下不执行。

  • 在递归枚举过程中,
  • dir 也总是进入隐藏目录/a-d(基于属性的)过滤器仅应用于枚举的 leaf 项目(在这种情况下仅应用于 files )。

    < / li>
  • dir 总是跟随符号链接/结点到其他目录(假设它具有必要的权限-请参阅下一点)。

  • dir /s 如果由于缺少权限而无法枚举其内容,则安静地忽略目录或目录的符号链接/联结-尽管这在上述特定情况下很有用隐藏的系统联结(您可以使用/a找到它们),这可能会导致您错过您要枚举的目录的内容,但不能真正缺少权限,因为dir /s不会表明此类内容甚至存在(emem)(如果您直接 定位无法访问的目录,则会误导dir /s错误消息,并且退出代码设置为cmd /c dir C:\ /s /ashl)。


性能比较:

  • 为了简单起见,以下测试使用假定在所有系统上都存在的相当大的目录树dir /s来比较纯枚举性能不进行过滤。也就是说,很容易调整测试以比较过滤性能。

  • 测试是从PowerShell运行的,这意味着通过为File Not Found创建子进程以调用1会引入一些开销,尽管(a)开销应该相对较大低,(b)更大的一点是,考虑到与c:\windows\winsxs相比,PowerShell的优越性,保留在PowerShell领域是值得的。

  • 测试使用的cmd.exe功能可以从this Gist下载,默认情况下平均运行10次。

dir /s

在装有Microsoft Windows 10 Pro(64位;版本1803,操作系统内部版本:17134.523)上的Windows PowerShell v5.1.17134.407的单核VMWare Fusion VM上,我得到以下计时,从最快到最慢(滚动到有权查看cmd.exe列以显示相对效果)

Time-Command

有趣的是,{<1>}和# Warm up the filesystem cache for the target dir., # both from PowerShell and cmd.exe, to be safe. gci 'c:\windows\winsxs' -rec >$null; cmd /c dir /s 'c:\windows\winsxs' >$null Time-Command ` { @([System.IO.Directory]::EnumerateFiles('c:\windows\winsxs', '*', 'AllDirectories')).Count }, { (Get-ChildItem -Force -Recurse -File 'c:\windows\winsxs').Count }, { (cmd /c dir /s /b /a-d 'c:\windows\winsxs').Count }, { cmd /c 'dir /s /b /a-d c:\windows\winsxs | find /c /v """"' } 解决方案在PowerShell Core 中均显着提高,而PowerShell Core 在.NET Core(自PowerShell Core 6.2.0- Preview.4,.NET Core 2.1):

Factor

[1] Command Secs (10-run avg.) TimeSpan Factor ------- ------------------ -------- ------ @([System.IO.Directory]::EnumerateFiles('c:\windows\winsxs', '*', 'AllDirectories')).Count 11.016 00:00:11.0158660 1.00 (cmd /c dir /s /b /a-d 'c:\windows\winsxs').Count 15.128 00:00:15.1277635 1.37 cmd /c 'dir /s /b /a-d c:\windows\winsxs | find /c /v """"' 16.334 00:00:16.3343607 1.48 (Get-ChildItem -Force -Recurse -File 'c:\windows\winsxs').Count 24.525 00:00:24.5254979 2.23 在本质上无疑比[System.IO.Directory]::EnumerateFiles()解决方案要快。在我的测试中(请参见上面的“性能比较:”部分),Get-ChildItem也胜过Command Secs (10-run avg.) TimeSpan Factor ------- ------------------ -------- ------ @([System.IO.Directory]::EnumerateFiles('c:\windows\winsxs', '*', 'AllDirectories')).Count 5.094 00:00:05.0940364 1.00 (cmd /c dir /s /b /a-d 'c:\windows\winsxs').Count 12.961 00:00:12.9613440 2.54 cmd /c 'dir /s /b /a-d c:\windows\winsxs | find /c /v """"' 14.999 00:00:14.9992965 2.94 (Get-ChildItem -Force -Recurse -File 'c:\windows\winsxs').Count 16.736 00:00:16.7357536 3.29 ,在Windows PowerShell中稍胜一筹,在PowerShell Core中也是如此,但others report different findings则胜过[System.IO.Directory]::EnumerateFiles()。就是说,找到最快的解决方案不是唯一的考虑因素,特别是如果需要的不仅仅是 counting 个文件,并且枚举必须健壮。这个答案讨论了各种解决方案的权衡。

[2]实际上,由于自Windows PowerShell v5.1 / PowerShell Core 6.2.0-preview.4起实施效率低下,实际上使用Get-ChildItem[System.IO.Directory]::EnumerateFiles() 比使用未过滤的cmd /c dir /s和使用-Path的附加流水线段要慢,如OP中所述-请参见this GitHub issue

答案 3 :(得分:1)

我的猜测是这要快得多:

$path = 'Fill_in_path_here'
@([System.IO.Directory]::EnumerateFiles($path, '*STB*', 'AllDirectories')).Count

如果您不想递归子文件夹,请将'AllDirectories'更改为'TopDirectoryOnly'

答案 4 :(得分:1)

我宁愿使用PowerShell,因为它是功能更强大的工具。您可以尝试一下.bat文件脚本。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET /A "N=0"
FOR /F "delims=" %%f IN ('DIR /S /B /A:-D "C:\path\to\files\*STB*"') DO (SET /A "N=!N!+1")
ECHO There are !N! files.

答案 5 :(得分:-1)

在多个系统上运行时,常规测试倾向于使用MCND的命令

结果超过1000次运行:

摘要


P/VM -          OS - PS Ver -  Files - Winner - Faster By % Seconds - Winner FPS - Loser FPS (Files Per Second)
---- - ----------- - ------ - ------ - ------ - ------------------- - ---------- - ----------------------------
 PM  - Win    7    - 5.1.1  -  87894 - SysIO  - 9%  (0.29s)         - 27,237 FPS - 24,970 FPS
 PM  - Win 2012    - 5.1.1  - 114968 - MCND   - 8%  (0.38s)         - 25,142 FPS - 23,226 FPS
 VM  - Win 2012    - 5.1.1  -  99312 - MCND   - 34% (1.57s)         - 21,265 FPS - 15,890 FPS
 PM  - Win 2016    - 5.1.1  - 102812 - SysIO  - 2%  (0.12s)         - 20,142 FPS - 19,658 FPS
 VM  - Win 2012 R2 -  4.0   -  98396 - MCND   - 29-34% (1.56-1.71s) - 19,787 FPS - 14,717 FPS
 PM  - Win 2008 R2 - 5.0.1  -  46557 - MCND   - 13-17% (0.33-0.44s) - 18,926 FPS - 16,088 FPS
 VM  - Win 2012 R2 -  4.0   -  90906 - MCND   - 22% (1.25s)         - 16,772 FPS - 13,629 FPS

另外,当MCND正常工作时,Theos命令将在C:\ Windows上炸弹。

-我在评论中向MK解释了\ cookies目录和其他此类目录是故意不可遍历的,因此您不会重复计算其中包含的文件。

MK在他的MAC OS上运行的VMWare融合上运行的测试远没有定论,并且显示执行时间非常慢,这使我立即得知它们是奇怪的结果。

此外,我无法执行MK编写的命令并无法接收文件夹中文件数量的结果,因此我在测试中包含了一个代码段,该代码段显示了所使用的所有方法均能给出正确的结果。 / p>

这是我运行时使用的代码,请注意,我还使用MK的首选方法运行了1000次运行以比较输出。

奇怪的是,一个用于MCND命令的.count方法似乎在我的win7系统上产生了非常有偏见的结果,与任何其他系统都非常不同,并且在我发布的初始运行中非常慢(慢5倍),并且将来变化最大我尝试过的跑步。

但是我认为这是由于负载所致,如果我不愿意发布更多内容,则计划删除这些结果,但是其余大多数系统与结果非常相似,我认为如果不这样做,它们看起来可能是多余的来自完全不同的系统。

$MaxRuns=1000
$Root_Dir="c:\windows\winsxs"
$Results_SysIO=@()
$Results_MCND1=@()
$Results_MCND2=@()
$Results_MCND3=@()
$Results_Meta=@()

FOR ($j=1; $j -le $MaxRuns; $j++) {

      Write-Progress -Activity "Testing Mthods for $MaxRuns Runs" -Status "Progress: $($j/$MaxRuns*100)% -- Run $j of $MaxRuns" -PercentComplete ($j/$MaxRuns*100) 

    # Tests  SysIO: @([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count
      $Results_SysIO+=Measure-Command { @([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count }
      sleep -milliseconds 500

    # Tests  MCND1 CMD Script:  DIR "%~1" /s /a-d ^| FIND /I /V "" | find /c /v ""
      $Results_MCND1+=Measure-Command {C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir}
      sleep -milliseconds 500

     # Tests MCND2 CMD Count: {cmd /c 'dir /s /b /a-d $Root_Dir | find /c /v """"'}
      $Results_MCND2+=Measure-Command {cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"}
      sleep -milliseconds 500

     # Tests MCND3 PS Count (cmd /c dir /s /b /a-d $Root_Dir).Count
      $Results_MCND3+=Measure-Command {(cmd /c dir /s /b /a-d $Root_Dir).Count}
      sleep -milliseconds 500


}

$CPU=Get-WmiObject Win32_Processor
""
"CPU: $($($CPU.name).count)x $($CPU.name | select -first 1) - Windows: $($(Get-WmiObject Win32_OperatingSystem).Version) - PS Version: $($PSVersionTable.PSVersion)"
ForEach ($Name in "SysIO","MCND1","MCND2","MCND3") {
    $Results_Meta+=[PSCustomObject]@{
      Method=$Name
      Min=$($($(Get-Variable -Name "Results_$Name" -valueOnly).TotalSeconds|Measure-Object -Minimum).Minimum)
      Max=$($($(Get-Variable -Name "Results_$Name" -valueOnly).TotalSeconds|Measure-Object -Maximum).Maximum)
      Avg=$($($(Get-Variable -Name "Results_$Name" -valueOnly).TotalSeconds|Measure-Object -Average).Average)
    }
}

$Results_Meta | sort Avg | select Method,Min,Max,Avg,@{N="Factor";e={("{0:f2}" -f (([math]::Round($_.Avg / $($Results_Meta | sort Avg | select Avg)[0].avg,2,1))))}}|FT

Time-Command `
{cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"},
{C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir},
{@([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count},
{(cmd /c dir /s /b /a-d $Root_Dir).Count} $MaxRuns `

""
"Results of Commands - (How many Files were in that Folder?):"

[PSCustomObject]@{
    SysIO=$(&{ @([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count })
    MCND1=$(&{C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir})
    MCND2=$(&{cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"})
    MCND3=$(&{(cmd /c dir /s /b /a-d $Root_Dir).Count})
}

我还没有从其他系统中收集其他运行,但是Win7结果并不一致,因此当我有更多要从其他系统添加到列表中时,我可能会删除它们。

详细调查结果


物理Win 7便携式计算机-87894文件-失败者:MCND为9%(.29s)较慢-(获奖方法:27,237 FPS) –在其他系统上重新运行时结果不一致是。

CPU:1个Intel(R)CoreTM i5-4310U CPU @ 2.00GHz-Windows:6.1.7601-PS版本:5.1.14409.1012


CPU: 1x Intel(R) Core(TM) i5-4310U CPU @ 2.00GHz - Windows: 6.1.7601 - PS Version: 5.1.14409.1012

Method       Min       Max          Avg Factor
------       ---       ---          --- ------
SysIO  3.0190345 6.1287085 3.2174689013 1.00  
MCND1  3.3655209 5.9024033 3.5490564665 1.10  
MCND3  3.5865989 7.5816207 3.8515160528 1.20  
MCND2  3.7542295 7.5619913 3.9471552743 1.23  
3.2174689013
0.0000366062
Command                                                                          Secs (1000-run avg.) TimeSpan         Factor
-------                                                                          -------------------- --------         ------
@([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count 3.227                00:00:03.2271969 1.00  
C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir                                        3.518                00:00:03.5178810 1.09  
cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"                       3.911                00:00:03.9106284 1.21  
(cmd /c dir /s /b /a-d $Root_Dir).Count                                          16.338               00:00:16.3377823 5.06  

Results of Commands - (How many Files were in that Folder?):

SysIO MCND1 MCND2 MCND3
----- ----- ----- -----
87894 87894 87894 87894

物理Win 2012桌面-114968个文件-失败者:SysIO慢了8%(.38s)-(获奖方式:25,142 FPS)

CPU:1个Intel(R)Xeon(R)CPU E5-2407 0 @ 2.20GHz-Windows:6.3.9600-PS版本:5.1.14409.1012


CPU: 1x Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz - Windows: 6.3.9600 - PS Version: 5.1.14409.1012

Method       Min        Max          Avg Factor
------       ---        ---          --- ------
MCND1  4.4957173  8.6672112 4.5726616326 1.00  
MCND3  4.6815509 18.6689706 4.7940769407 1.05  
SysIO  4.8789948  5.1625618 4.9476786004 1.08  
MCND2  5.0404912  7.2557797 5.0854683543 1.11  

Command                                                                          Secs (1000-run avg.) TimeSpan         Factor
-------                                                                          -------------------- --------         ------
C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir                                        4.542                00:00:04.5418653 1.00  
(cmd /c dir /s /b /a-d $Root_Dir).Count                                          4.772                00:00:04.7719769 1.05  
@([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count 4.933                00:00:04.9330404 1.09  
cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"                       5.086                00:00:05.0855891 1.12  

Results of Commands - (How many Files were in that Folder?):

 SysIO MCND1  MCND2   MCND3
 ----- -----  -----   -----
114968 114968 114968 114968

VM Win 2012 Server-99312文件-失败者:SysIO慢34%(1.57s)-(获奖方法:21,265 FPS)

CPU:4个Intel(R)Xeon(R)CPU E7-2850 @ 2.00GHz-Windows:6.3.9600-PS版本:5.1.14409.1005


CPU: 4x Intel(R) Xeon(R) CPU E7- 2850  @ 2.00GHz - Windows: 6.3.9600 - PS Version: 5.1.14409.1005

Method       Min       Max              Avg Factor
------       ---       ---              --- ------
MCND1  4.5563908 5.2656374     4.6812307177 1.00  
MCND3  4.6696518 5.3846231     4.9064852835 1.05  
MCND2  5.0559205 5.5583717 5.15425442679999 1.10  
SysIO   6.036294 6.7952711      6.254027334 1.34  

Command                                                                          Secs (1000-run avg.) TimeSpan         Factor
-------                                                                          -------------------- --------         ------
C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir                                        4.669                00:00:04.6689048 1.00  
(cmd /c dir /s /b /a-d $Root_Dir).Count                                          4.934                00:00:04.9336925 1.06  
cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"                       5.153                00:00:05.1532386 1.10  
@([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count 6.239                00:00:06.2389727 1.34  

Results of Commands - (How many Files were in that Folder?):

SysIO MCND1 MCND2 MCND3
----- ----- ----- -----
99312 99312 99312 99312

物理Win 2016 Server-102812文件-失败者:MCND为2%(0.12s)较慢-(获奖方法:20,142 FPS)

CPU:2个Intel®Xeon(R)CPU E5-2667 v4 @ 3.20GHz-Windows:10.0.14393-PS版本:5.1.14393.2608


CPU: 2x Intel(R) Xeon(R) CPU E5-2667 v4 @ 3.20GHz - Windows: 10.0.14393 - PS Version: 5.1.14393.2608

Method       Min       Max              Avg Factor
------       ---       ---              --- ------
SysIO  5.0414178 5.5279055     5.1043614001 1.00  
MCND3  5.0468476 5.4673033 5.23160342460001 1.02  
MCND1  5.1649438 5.6745749 5.26664923669999 1.03  
MCND2  5.3280266 5.7989287     5.3747728434 1.05  

Command                                                                          Secs (1000-run avg.) TimeSpan         Factor
-------                                                                          -------------------- --------         ------
@([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count 5.156                00:00:05.1559628 1.00  
(cmd /c dir /s /b /a-d $Root_Dir).Count                                          5.256                00:00:05.2556244 1.02  
C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir                                        5.272                00:00:05.2722298 1.02  
cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"                       5.375                00:00:05.3747287 1.04  

Results of Commands - (How many Files were in that Folder?):

 SysIO MCND1  MCND2   MCND3
 ----- -----  -----   -----
102812 102812 102812 102812

VM Win 2012 R2服务器-98396文件-失败者:SysIO 29-34%(1.56-1.71s)较慢-(获奖方法:19,787 FPS)

CPU:2个Intel(R)Xeon(R)CPU E7-2850 @ 2.00GHz-Windows:6.3.90600-PS版本:4.0


CPU: 2x Intel(R) Xeon(R) CPU E7- 2850  @ 2.00GHz - Windows: 6.3.9600 - PS Version: 4.0


Method                                                        Min                             Max                             Avg Factor                         
------                                                        ---                             ---                             --- ------                         
MCND1                                                   4.7007419                       5.9567352                4.97285509330001 1.00                           
MCND2                                                   5.2086999                       6.7678172                    5.4849721167 1.10                           
MCND3                                                   5.0116501                       8.7416729                5.71391797679999 1.15                           
SysIO                                                   6.2400687                        7.414201                    6.6862204345 1.34 

Command                                  Secs (1000-run avg.)                     TimeSpan                                Factor                                 
-------                                  --------------------                     --------                                ------                                 
C:\Admin\TestMCNDFindFiles1.cmd $Root... 5.359                                    00:00:05.3592304                        1.00                                   
cmd /c `"dir /s /b /a-d $Root_Dir `| ... 5.711                                    00:00:05.7107644                        1.07                                   
(cmd /c dir /s /b /a-d $Root_Dir).Count  6.173                                    00:00:06.1728413                        1.15                                   
@([System.IO.Directory]::EnumerateFil... 6.921                                    00:00:06.9213833                        1.29                                   

Results of Commands - (How many Files were in that Folder?):

                                   SysIO MCND1                                    MCND2                                                                     MCND3
                                    ----- -----                                    -----                                                                     -----
                                   98396 98396                                    98396                                                                     98396

物理Win 2008 R2服务器-46557个文件-失败者:SysIO 13-17%(0.33-0.44s)较慢-(获奖方法:18,926 FPS)

CPU:2个Intel(R)Xeon(R)CPU 5160 @ 3.00GHz-Windows:6.1.7601-PS版本:5.0.10586.117


CPU: 2x Intel(R) Xeon(R) CPU            5160  @ 3.00GHz - Windows: 6.1.7601 - PS Version: 5.0.10586.117

Method       Min       Max          Avg Factor
------       ---       ---          --- ------
MCND3  2.2370018 2.8176253 2.4653543378 1.00  
MCND1  2.4063578 2.8108379 2.5373719772 1.03  
MCND2  2.5953631 2.9085969 2.7312907064 1.11  
SysIO  2.7207865 30.335369 2.8940406601 1.17  

Command                                                                          Secs (1000-run avg.) TimeSpan         Factor
-------                                                                          -------------------- --------         ------
(cmd /c dir /s /b /a-d $Root_Dir).Count                                          2.500                00:00:02.5001477 1.00  
C:\Admin\TestMCNDFindFiles1.cmd $Root_Dir                                        2.528                00:00:02.5275259 1.01  
cmd /c `"dir /s /b /a-d $Root_Dir `| find /c /v `"`"`"`"`"                       2.726                00:00:02.7259539 1.09  
@([System.IO.Directory]::EnumerateFiles($Root_Dir, '*', 'AllDirectories')).Count 2.826                00:00:02.8259697 1.13  

Results of Commands - (How many Files were in that Folder?):

SysIO MCND1 MCND2 MCND3
----- ----- ----- -----
46557 46557 46557 46557

VMWare Win 2012 R2 Server-90906文件-失败者:SysIO 23%(1.25s)较慢-(获奖方法:15,722 FPS)

CPU:4倍Intel(R)Xeon(R)CPU E7-2850 @ 2.00GHz-Windows:6.3.90600-PS版本:4.0


CPU: 4x Intel(R) Xeon(R) CPU E7- 2850  @ 2.00GHz - Windows: 6.3.9600 - PS Version: 4.0

Method                                                        Min                             Max                             Avg Factor                         
------                                                        ---                             ---                             --- ------                         
MCND1                                                   5.0516057                       6.4537866                     5.423386317 1.00                           
MCND3                                                   5.3297157                       7.1722929                    5.9030135773 1.09                           
MCND2                                                   5.5460548                       7.0356455                     5.931334868 1.09                           
SysIO                                                   6.2059999                      19.5145373                    6.6747122712 1.23                           

Command                                  Secs (1000-run avg.)                     TimeSpan                                Factor                                 
-------                                  --------------------                     --------                                ------                                 
C:\Admin\TestMCNDFindFiles1.cmd $Root... 5.409                                    00:00:05.4092046                        1.00                                   
(cmd /c dir /s /b /a-d $Root_Dir).Count  5.936                                    00:00:05.9358832                        1.10                                   
cmd /c `"dir /s /b /a-d $Root_Dir `| ... 6.069                                    00:00:06.0689899                        1.12                                   
@([System.IO.Directory]::EnumerateFil... 6.557                                    00:00:06.5571859                        1.21                                   


Results of Commands - (How many Files were in that Folder?):

                                   SysIO MCND1                                    MCND2                                                                     MCND3
                                    ----- -----                                    -----                                                                     -----
                                   90906 90906                                    90906                                                                     90906