Что нового

_DirGetSizeEx - Ускорение получения размера каталога

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
До сих пор использовал версию _DirGetSizeEx с FileFindFirstFile (есть на оф. форуме моя модификация этой функций от KaFu, но он (оф. сайт) на данный момент лежит).

Но тут недавно наткнулся на метод с vbs, который работает значительно быстрее обычной DirGetSize, и даже быстрее _DirGetSizeEx, которая считалась самой быстрой в AutoIt:

Код:
ConsoleWrite(_DirGetSizeEx(@WindowsDir) & @LF)

Func _DirGetSizeEx($sPath)
	Local $aPathIsDir, $iSize, $iErr = 0, $iRet = 0
	
	If Not $sPath Then
		Return SetError(1)
	EndIf
	
	If Not IsDeclared("o_DGSE_FSO") Then
		Global $o_DGSE_FSO = ObjCreate("Scripting.FileSystemObject")
		Global $o_DGSE_ErrEvent = ObjEvent("AutoIt.Error", "_DirGetSizeEx")
	EndIf
	
	$aPathIsDir = DllCall('shlwapi.dll', 'int', 'PathIsDirectoryW', 'wstr', $sPath)
	
	If Not $aPathIsDir[0] Then
		Return SetError(-1, 0, 0)
	EndIf
	
	If IsObj($o_DGSE_FSO) Then
		$iSize = $o_DGSE_FSO.GetFolder($sPath).Size
		
		If Not @error Then
			$iRet = $iSize
		EndIf
	EndIf
	
	If $iRet = 0 Then
		$iRet = DirGetSize($sPath)
		
		If @error Then
			$iErr = 1
			$iRet = 0
		EndIf
	EndIf
	
	$o_DGSE_ErrEvent = 0
	Return SetError($iErr, 0, $iRet)
EndFunc


Следующий тест показывает значительную разницу в скорости работы функций, как при первом запуске (до кеширования), так и при последующих запусках (по крайней мере на моей машине):

Код:
;========= Для предотвращения ложного теста
_Test_DirGetSize()
_Test_DirGetSizeEx()
;========= Для предотвращения ложного теста

_SpeedTest("_Test_DirGetSize")
_SpeedTest("_Test_DirGetSizeEx")

Func _Test_DirGetSize()
	DirGetSize(@WindowsDir)
EndFunc

Func _Test_DirGetSizeEx()
	_DirGetSizeEx(@WindowsDir)
EndFunc

Func _SpeedTest($sTestFunc, $iRepeat_Test = 5)
	Local $aTests[$iRepeat_Test+1] = [$iRepeat_Test]
	Local $iTotal_Tests = 0
	
	For $x = 1 To $iRepeat_Test
		$iTimer = TimerInit()
		
		;=== CODE TEST ====
		Call($sTestFunc)
		;=== CODE TEST ===
		
		$aTests[$x] = Round(TimerDiff($iTimer), 3)
		$iTotal_Tests += $aTests[$x]
		ConsoleWrite("Test #" & $x & ": " & $aTests[$x] & " ms" & @LF)
	Next

	$iAverage = Round($iTotal_Tests / $iRepeat_Test, 3)
	ConsoleWrite("======================" & @LF & "Tests Average For [" & $sTestFunc & "]: " & $iAverage & @LF & "======================" & @LF & @LF)
EndFunc

P.S
Пытался сделать подобную функцию через ком. строку (Dir...), но так ничего и не вышло, из за ограничений в локализаций.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
CreatoR,
Я несколько раз менял местами
Код:
;...
_SpeedTest("_Test_DirGetSizeEx")
; и
_SpeedTest("_Test_DirGetSize")
;...
В результате (у меня) та функция, которая проверяется второй всегда отрабатывает быстрее первой. Почему? :wacko:

PS
А если запускать их в цикле
Код:
For $i = 1 To 5
	_SpeedTest("_Test_DirGetSizeEx")
	_SpeedTest("_Test_DirGetSize")
Next
То (у меня) первый проход - вторая функция всегда быстрее, а в следующих проходах, независимо от того, какая функция стоит первой, _DirGetSizeEx() отрабатывает быстрее. :wacko: :wacko:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
madmasles [?]
В результате (у меня) та функция, которая проверяется второй всегда отрабатывает быстрее первой. Почему?
Это только при первом запуске (с одного скрипта на одну и туже папку), или нет?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
CreatoR [?]
Это только при первом запуске (с одного скрипта на одну и туже папку), или нет?
На одну и ту же папку запускал раз по 10 с интервалом ~30 секунд, меняя функции местами.

Решил проверить на Windows 7 (до этого проверял на XP SP3). _DirGetSizeEx() у меня выдает ошибку:
: ==> The requested action with this object has failed.:
Return $o_DGSE_FSO.GetFolder($sPath).Size
Return $o_DGSE_FSO.GetFolder($sPath).Size^ ERROR
:wacko: :wacko: :wacko:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
madmasles [?]
На одну и ту же папку запускал раз по 10 с интервалом ~30 секунд, меняя функции местами.
А если ещё кроме этого, поставить паузу в секунду в начало скрипта?


Добавлено:
Сообщение автоматически объединено:

madmasles
И ещё, Вы уверены что функция _DirGetSizeEx использует FileSystemObject, а не переходит к проверке встроенной DirGetSize?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
CreatoR [?]
Вы уверены что функция _DirGetSizeEx использует FileSystemObject
Проверял, используется именно Scripting.FileSystemObject.
Поставил паузу в начало, результат не изменился.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
madmasles [?]
Решил проверить на Windows 7 (до этого проверял на XP SP3). _DirGetSizeEx() у меня выдает ошибку
Да, это связано с правами доступа к системной папке (даже из под администратора). Попробуйте например @TempDir, должно сработать.

Функцию поправил, если подобная ошибка и возникнет, то размер будет возвращаться встроенным методом (DirGetSize).
 

Malderin

Новичок
Сообщения
60
Репутация
1
Действительно для папок на локальном ПК работает значительно быстрее, но вот для сетевых, к сожалению, работает даже медленнее. Как проверял.
Есть у меня некий скрипт который я использую для мониторинга сетевой папки, которая содержит в себе именные папки работников. Цель у меня была получить общий размер этой папки и размеры каждой вложенной папки в отдельности (потом это загоняется в эксель). После запуска проверки размера время определялось через TimerDiff.
Общий размер папки примерно 36Гб, вложенных папок первого уровня 87 (папок и подпапок всего 5161).
Результат такой (3 запуска проверки подряд без остановки скрипта):
1. Скрипт на DirGetSize - 12,15 сек; 11,85 сек, 11,97 сек;
2. Скрипт на _DirGetSizeEx - 15.13 сек, 14,64 сек, 14,77 сек.
Вывод - имеет смысл использовать данную функцию, но конечно надо смотреть по ситуации как быстрее.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Ещё один быстрый(?) вариант получения размера папки:

Код:
$iSize = _DirGetSizeFast(@UserProfileDir)
MsgBox(64, @ScriptName, Round($iSize / 1024 / 1024 / 1024, 2) & ' GB')

Func _DirGetSizeFast($sDir)
    If Not StringInStr(FileGetAttrib($sDir), 'D') Then
        Return SetError(1, 0, 0)
    EndIf
    
    Local $iPID = Run(@ComSpec & ' /C robocopy.exe "' & StringRegExpReplace($sDir, '[\\/]+$', '') & '" "\\localhost\C$\nul" /L /XJ /R:0 /W:1 /NP /E /BYTES /NFL /NDL /NJH /MT:64', '', @SW_HIDE, 2)
    ProcessWaitClose($iPID)
    
    Local $aSize = StringRegExp(StdoutRead($iPID), '(?m)^\D+(\d+)', 3)
    
    If UBound($aSize) < 3 Then
        Return SetError(2, 0, 0)
    EndIf
    
    Return Number($aSize[2])
EndFunc


Кто то может протестировать у себя?
 
  • Like
Реакции: xXx

xXx

╚{■_■}╗
Меценат
Сообщения
229
Репутация
87
Кто то может протестировать у себя?
Вот что показал такой тест:
Код:
;========= Для предотвращения ложного теста
_Test_DirGetSize()
_Test_DirGetSizeEx()
_Test_DirGetSizeFast()
;========= Для предотвращения ложного теста

_SpeedTest("_Test_DirGetSize")
_SpeedTest("_Test_DirGetSizeEx")
_SpeedTest("_Test_DirGetSizeFast")

Func _Test_DirGetSize()
    Return DirGetSize(@WindowsDir)
EndFunc   ;==>_Test_DirGetSize

Func _Test_DirGetSizeEx()
    Return _DirGetSizeEx(@WindowsDir)
EndFunc   ;==>_Test_DirGetSizeEx

Func _Test_DirGetSizeFast()
    Return _DirGetSizeFast(@WindowsDir)
EndFunc   ;==>_Test_DirGetSizeFast

Func _DirGetSizeEx($sPath)
    Local $aPathIsDir, $iSize, $iErr = 0, $iRet = 0

    If Not $sPath Then
        Return SetError(1)
    EndIf

    If Not IsDeclared("o_DGSE_FSO") Then
        Global $o_DGSE_FSO = ObjCreate("Scripting.FileSystemObject")
        Global $o_DGSE_ErrEvent = ObjEvent("AutoIt.Error", "_DirGetSizeEx")
    EndIf

    $aPathIsDir = DllCall('shlwapi.dll', 'int', 'PathIsDirectoryW', 'wstr', $sPath)

    If Not $aPathIsDir[0] Then
        Return SetError(-1, 0, 0)
    EndIf

    If IsObj($o_DGSE_FSO) Then
        $iSize = $o_DGSE_FSO.GetFolder($sPath).Size

        If Not @error Then
            $iRet = $iSize
        EndIf
    EndIf

    If $iRet = 0 Then
        $iRet = DirGetSize($sPath)

        If @error Then
            $iErr = 1
            $iRet = 0
        EndIf
    EndIf

    $o_DGSE_ErrEvent = 0
    Return SetError($iErr, 0, $iRet)
EndFunc   ;==>_DirGetSizeEx

Func _DirGetSizeFast($sDir)
    If Not StringInStr(FileGetAttrib($sDir), 'D') Then
        Return SetError(1, 0, 0)
    EndIf

    Local $iPID = Run(@ComSpec & ' /C robocopy.exe "' & StringRegExpReplace($sDir, '[\\/]+$', '') & '" "\\localhost\C$\nul" /L /XJ /R:0 /W:1 /NP /E /BYTES /NFL /NDL /NJH /MT:64', '', @SW_HIDE, 2)
    ProcessWaitClose($iPID)

    Local $aSize = StringRegExp(StdoutRead($iPID), '(?m)^\D+(\d+)', 3)

    If UBound($aSize) < 3 Then
        Return SetError(2, 0, 0)
    EndIf

    Return Number($aSize[2])
EndFunc   ;==>_DirGetSizeFast

Func _SpeedTest($sTestFunc, $iRepeat_Test = 5)
    Local $aTests[$iRepeat_Test + 1] = [$iRepeat_Test]
    Local $iSize, $iTotal_Tests = 0

    For $x = 1 To $iRepeat_Test
        $iTimer = TimerInit()

        ;=== CODE TEST ====
        $iSize = Call($sTestFunc)
        ;=== CODE TEST ===

        $aTests[$x] = Round(TimerDiff($iTimer), 3)
        $iTotal_Tests += $aTests[$x]
        ConsoleWrite("Test #" & $x & ": Size = " & $iSize & ", Time = " & $aTests[$x] & " ms" & @LF)
    Next

    $iAverage = Round($iTotal_Tests / $iRepeat_Test, 3)
    ConsoleWrite("======================" & @LF & "Tests Average For [" & $sTestFunc & "]: " & $iAverage & @LF & "======================" & @LF & @LF)
EndFunc   ;==>_SpeedTest
Код:
Test #1: Size = 23093697527, Time = 3886.423 ms
Test #2: Size = 23093697514, Time = 3856.154 ms
Test #3: Size = 23093697514, Time = 3889.672 ms
Test #4: Size = 23093820465, Time = 3788.415 ms
Test #5: Size = 23093820465, Time = 3882.133 ms
======================
Tests Average For [_Test_DirGetSize]: 3860.559
======================

Test #1: Size = 23093820465, Time = 3938.467 ms
Test #2: Size = 23093820465, Time = 3900.536 ms
Test #3: Size = 23093820465, Time = 3959.892 ms
Test #4: Size = 23093820465, Time = 3971.389 ms
Test #5: Size = 23093820465, Time = 4042.794 ms
======================
Tests Average For [_Test_DirGetSizeEx]: 3962.616
======================

Test #1: Size = 23093910669, Time = 1861.852 ms
Test #2: Size = 23093910747, Time = 1936.466 ms
Test #3: Size = 23093910747, Time = 2017.456 ms
Test #4: Size = 23093910747, Time = 1904.441 ms
Test #5: Size = 23093910747, Time = 1906.846 ms
======================
Tests Average For [_Test_DirGetSizeFast]: 1925.412
 

xXx

╚{■_■}╗
Меценат
Сообщения
229
Репутация
87
насчёт стабильности получения данных?
Стабильность-то пока не глючит...

Для получения более объективных результатов скомпилировал скрипт ниже:
Код:
Global $sSir, $sDir[2] = [@WindowsDir, @ScriptDir]

For $i = 0 To UBound($sDir) - 1
    ;========= Для предотвращения ложного теста
    DirGetSize($sDir[$i])
    _DirGetSizeEx($sDir[$i])
    _DirGetSizeFast($sDir[$i])
    ;========= Для предотвращения ложного теста

    _SpeedTest('DirGetSize', $sDir[$i])
    _SpeedTest('_DirGetSizeEx', $sDir[$i])
    _SpeedTest('_DirGetSizeFast', $sDir[$i])

    $sSir &= '###############################################' & @LF & @LF
Next

MsgBox(262144, Default, $sSir) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>

Func _DirGetSizeEx($sPath)
    Local $aPathIsDir, $iSize, $iErr = 0, $iRet = 0

    If Not $sPath Then
        Return SetError(1)
    EndIf

    If Not IsDeclared('o_DGSE_FSO') Then
        Global $o_DGSE_FSO = ObjCreate('Scripting.FileSystemObject')
        Global $o_DGSE_ErrEvent = ObjEvent('AutoIt.Error', '_DirGetSizeEx')
    EndIf

    $aPathIsDir = DllCall('shlwapi.dll', 'int', 'PathIsDirectoryW', 'wstr', $sPath)

    If Not $aPathIsDir[0] Then
        Return SetError(-1, 0, 0)
    EndIf

    If IsObj($o_DGSE_FSO) Then
        $iSize = $o_DGSE_FSO.GetFolder($sPath).Size

        If Not @error Then
            $iRet = $iSize
        EndIf
    EndIf

    If $iRet = 0 Then
        $iRet = DirGetSize($sPath)

        If @error Then
            $iErr = 1
            $iRet = 0
        EndIf
    EndIf

    $o_DGSE_ErrEvent = 0
    Return SetError($iErr, 0, $iRet)
EndFunc   ;==>_DirGetSizeEx

Func _DirGetSizeFast($sDir)
    If Not StringInStr(FileGetAttrib($sDir), 'D') Then
        Return SetError(1, 0, 0)
    EndIf

    Local $iPID = Run(@ComSpec & ' /C robocopy.exe "' & StringRegExpReplace($sDir, '[\\/]+$', '') & '" "\\localhost\C$\nul" /L /XJ /R:0 /W:1 /NP /E /BYTES /NFL /NDL /NJH /MT:64', '', @SW_HIDE, 2)
    ProcessWaitClose($iPID)

    Local $aSize = StringRegExp(StdoutRead($iPID), '(?m)^\D+(\d+)', 3)

    If UBound($aSize) < 3 Then
        Return SetError(2, 0, 0)
    EndIf

    Return Number($aSize[2])
EndFunc   ;==>_DirGetSizeFast

Func _SpeedTest($sTestFunc, $sDir, $iRepeat_Test = 5)
    Local $aTests[$iRepeat_Test + 1] = [$iRepeat_Test]
    Local $iSize, $iTotal_Tests = 0

    $sSir &= '+> ' & $sTestFunc & '("' & $sDir & '"):' & @LF

    For $x = 1 To $iRepeat_Test
        $iTimer = TimerInit()

        ;=== CODE TEST ====
        $iSize = Call($sTestFunc, $sDir)
        ;=== CODE TEST ===

        $aTests[$x] = Round(TimerDiff($iTimer), 3)
        $iTotal_Tests += $aTests[$x]
        $sSir &= @TAB & 'Test #' & $x & ': Size = ' & $iSize & ', Time = ' & $aTests[$x] & ' ms' & @LF
    Next

    $iAverage = Round($iTotal_Tests / $iRepeat_Test, 3)
    $sSir &= '+> Average Time: ' & $iAverage & @LF & @LF
EndFunc   ;==>_SpeedTest
Положил его в папку "C:\Program Files\" старенького ноутбука на работе с HDD, выключил Антивирус и получил такие результаты:
Код:
+> DirGetSize("C:\Windows"):
    Test #1: Size = 11270504222, Time = 3269.328 ms
    Test #2: Size = 11270504222, Time = 4780.572 ms
    Test #3: Size = 11270504222, Time = 3843.911 ms
    Test #4: Size = 11270504222, Time = 2669.284 ms
    Test #5: Size = 11270504222, Time = 2874.12 ms
+> Average Time: 3487.443

+> _DirGetSizeEx("C:\Windows"):
    Test #1: Size = 11270504222, Time = 2733.979 ms
    Test #2: Size = 11270504222, Time = 2764.577 ms
    Test #3: Size = 11270504222, Time = 4339.203 ms
    Test #4: Size = 11270504222, Time = 3004.203 ms
    Test #5: Size = 11270504222, Time = 2756.98 ms
+> Average Time: 3119.788

+> _DirGetSizeFast("C:\Windows"):
    Test #1: Size = 11270529138, Time = 1967.939 ms
    Test #2: Size = 11270529138, Time = 1994.854 ms
    Test #3: Size = 11270529138, Time = 2117.859 ms
    Test #4: Size = 11270529138, Time = 1973.792 ms
    Test #5: Size = 11270529138, Time = 2180.979 ms
+> Average Time: 2047.085

###############################################

+> DirGetSize("C:\Program Files"):
    Test #1: Size = 5100461250, Time = 574.097 ms
    Test #2: Size = 5100461250, Time = 553.728 ms
    Test #3: Size = 5100461250, Time = 552.701 ms
    Test #4: Size = 5100461250, Time = 552.432 ms
    Test #5: Size = 5100461250, Time = 550.896 ms
+> Average Time: 556.771

+> _DirGetSizeEx("C:\Program Files"):
    Test #1: Size = 5100461250, Time = 1076.421 ms
    Test #2: Size = 5100461250, Time = 1075.894 ms
    Test #3: Size = 5100461250, Time = 1076.46 ms
    Test #4: Size = 5100461250, Time = 1076.5 ms
    Test #5: Size = 5100461250, Time = 1081.257 ms
+> Average Time: 1077.306

+> _DirGetSizeFast("C:\Program Files"):
    Test #1: Size = 5100461250, Time = 728.445 ms
    Test #2: Size = 5100461250, Time = 729.587 ms
    Test #3: Size = 5100461250, Time = 758.702 ms
    Test #4: Size = 5100461250, Time = 742.71 ms
    Test #5: Size = 5100461250, Time = 765.558 ms
+> Average Time: 745
Код:
+> DirGetSize("C:\Windows"):
    Test #1: Size = 10824324877, Time = 3251.115 ms
    Test #2: Size = 10824324877, Time = 2621.57 ms
    Test #3: Size = 10824324877, Time = 3736.467 ms
    Test #4: Size = 10824324877, Time = 2908.95 ms
    Test #5: Size = 10824324877, Time = 2574.027 ms
+> Average Time: 3018.426

+> _DirGetSizeEx("C:\Windows"):
    Test #1: Size = 10824324877, Time = 2572.063 ms
    Test #2: Size = 10824324877, Time = 2586.704 ms
    Test #3: Size = 10824324877, Time = 2586.134 ms
    Test #4: Size = 10824324877, Time = 2586.079 ms
    Test #5: Size = 10824324877, Time = 3113.864 ms
+> Average Time: 2688.969

+> _DirGetSizeFast("C:\Windows"):
    Test #1: Size = 10824324877, Time = 2389.433 ms
    Test #2: Size = 10824324877, Time = 1986.816 ms
    Test #3: Size = 10824324877, Time = 1944.784 ms
    Test #4: Size = 10824324877, Time = 1953.769 ms
    Test #5: Size = 10824324877, Time = 1946.689 ms
+> Average Time: 2044.298

###############################################

+> DirGetSize("C:\Program Files"):
    Test #1: Size = 5100462481, Time = 577.855 ms
    Test #2: Size = 5100462481, Time = 553.392 ms
    Test #3: Size = 5100462481, Time = 553.435 ms
    Test #4: Size = 5100462481, Time = 552.525 ms
    Test #5: Size = 5100462481, Time = 552.868 ms
+> Average Time: 558.015

+> _DirGetSizeEx("C:\Program Files"):
    Test #1: Size = 5100462481, Time = 1079.171 ms
    Test #2: Size = 5100462481, Time = 1079.737 ms
    Test #3: Size = 5100462481, Time = 1079.493 ms
    Test #4: Size = 5100462481, Time = 1078.242 ms
    Test #5: Size = 5100462481, Time = 1074.827 ms
+> Average Time: 1078.294

+> _DirGetSizeFast("C:\Program Files"):
    Test #1: Size = 5100462481, Time = 715.307 ms
    Test #2: Size = 5100462481, Time = 727.625 ms
    Test #3: Size = 5100462481, Time = 734.653 ms
    Test #4: Size = 5100462481, Time = 748.645 ms
    Test #5: Size = 5100462481, Time = 732.621 ms
+> Average Time: 731.77

Затем запустил .exe на другом логическом диске "D:\"
Код:
+> DirGetSize("C:\Windows"):
    Test #1: Size = 11269791493, Time = 2588.822 ms
    Test #2: Size = 11269791493, Time = 2574.692 ms
    Test #3: Size = 11269791493, Time = 2559.543 ms
    Test #4: Size = 11269791493, Time = 2561.285 ms
    Test #5: Size = 11269791493, Time = 2553.01 ms
+> Average Time: 2567.47

+> _DirGetSizeEx("C:\Windows"):
    Test #1: Size = 11269791493, Time = 2618.327 ms
    Test #2: Size = 11269791493, Time = 2622.977 ms
    Test #3: Size = 11269791493, Time = 2619.689 ms
    Test #4: Size = 11269791493, Time = 2616.551 ms
    Test #5: Size = 11269791493, Time = 2620.113 ms
+> Average Time: 2619.531

+> _DirGetSizeFast("C:\Windows"):
    Test #1: Size = 11269816409, Time = 1911.46 ms
    Test #2: Size = 11269816409, Time = 1922.748 ms
    Test #3: Size = 11269816409, Time = 1913.792 ms
    Test #4: Size = 11269816409, Time = 1919.703 ms
    Test #5: Size = 11269816409, Time = 1905.725 ms
+> Average Time: 1914.686

###############################################

+> DirGetSize("D:\"):
    Test #1: Size = 27128376860, Time = 294.509 ms
    Test #2: Size = 27128376860, Time = 279.256 ms
    Test #3: Size = 27128376860, Time = 278.305 ms
    Test #4: Size = 27128376860, Time = 278.823 ms
    Test #5: Size = 27128376860, Time = 279.325 ms
+> Average Time: 282.044

+> _DirGetSizeEx("D:\"):
    Test #1: Size = 27128376860, Time = 509.825 ms
    Test #2: Size = 27128376860, Time = 511.104 ms
    Test #3: Size = 27128376860, Time = 511.77 ms
    Test #4: Size = 27128376860, Time = 512.897 ms
    Test #5: Size = 27128376860, Time = 510.208 ms
+> Average Time: 511.161

+> _DirGetSizeFast("D:\"):
    Test #1: Size = 27128528500, Time = 521.642 ms
    Test #2: Size = 27128528500, Time = 556.485 ms
    Test #3: Size = 27128528500, Time = 550.483 ms
    Test #4: Size = 27128528500, Time = 554.439 ms
    Test #5: Size = 27128528500, Time = 550.463 ms
+> Average Time: 546.702
Код:
+> DirGetSize("C:\Windows"):
    Test #1: Size = 10824324877, Time = 2541.041 ms
    Test #2: Size = 10824324877, Time = 2494.673 ms
    Test #3: Size = 10824324877, Time = 2490.975 ms
    Test #4: Size = 10824324877, Time = 2502.044 ms
    Test #5: Size = 10824324877, Time = 2498.17 ms
+> Average Time: 2505.381

+> _DirGetSizeEx("C:\Windows"):
    Test #1: Size = 10824324877, Time = 2496.673 ms
    Test #2: Size = 10824324877, Time = 2490.042 ms
    Test #3: Size = 10824324877, Time = 2495.616 ms
    Test #4: Size = 10824324877, Time = 2495.184 ms
    Test #5: Size = 10824324877, Time = 2495.033 ms
+> Average Time: 2494.51

+> _DirGetSizeFast("C:\Windows"):
    Test #1: Size = 10824324877, Time = 1851.839 ms
    Test #2: Size = 10824324877, Time = 1864.964 ms
    Test #3: Size = 10824324877, Time = 1876.438 ms
    Test #4: Size = 10824324877, Time = 1854.696 ms
    Test #5: Size = 10824324877, Time = 1868.691 ms
+> Average Time: 1863.326

###############################################

+> DirGetSize("D:\"):
    Test #1: Size = 27040995401, Time = 282.821 ms
    Test #2: Size = 27040995401, Time = 244.465 ms
    Test #3: Size = 27040995401, Time = 245.585 ms
    Test #4: Size = 27040995401, Time = 244.969 ms
    Test #5: Size = 27040995401, Time = 244.954 ms
+> Average Time: 252.559

+> _DirGetSizeEx("D:\"):
    Test #1: Size = 27040995401, Time = 245.953 ms
    Test #2: Size = 27040995401, Time = 246.386 ms
    Test #3: Size = 27040995401, Time = 244.97 ms
    Test #4: Size = 27040995401, Time = 249.159 ms
    Test #5: Size = 27040995401, Time = 245.422 ms
+> Average Time: 246.378

+> _DirGetSizeFast("D:\"):
    Test #1: Size = 27040995401, Time = 484.426 ms
    Test #2: Size = 27040995401, Time = 501.416 ms
    Test #3: Size = 27040995401, Time = 506.48 ms
    Test #4: Size = 27040995401, Time = 510.359 ms
    Test #5: Size = 27040995401, Time = 512.408 ms
+> Average Time: 503.018
Обратите внимание на разброс в "$Size".
 
Последнее редактирование:
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
вроде все логи предоставил.
Да извиняюсь, не обратил внимания.
Обратите внимание на разброс в "$Size".
Странно, а можно посмотреть что выдаёт Stdout в _DirGetSizeFast (в том примере где разница в результатах)?
Мне кажется там два значения, возможно первое это типа "Размер", а второе это "Размер на диске".
 

xXx

╚{■_■}╗
Меценат
Сообщения
229
Репутация
87
И так, повторяем такие же операции, только на другом ПК.
Проблемные случаи:
  • Запуск .exe в "C:\Program Files\" от имени Админа:
    Код:
    +> DirGetSize("C:\windows"):    Test #1: Size = 25480191588, Time = 3464.082 ms
    Test #2: Size = 25480191588, Time = 3403.774 ms
    Test #3: Size = 25480191588, Time = 3410.935 ms
    Test #4: Size = 25480191588, Time = 3414.771 ms
    Test #5: Size = 25480191588, Time = 3379.104 ms
    +> Average Time: 3414.533
    
    +> _DirGetSizeEx("C:\windows"):
    Test #1: Size = 25480191588, Time = 3495.324 ms
    Test #2: Size = 25480191588, Time = 3482.33 ms
    Test #3: Size = 25480191588, Time = 3470.224 ms
    Test #4: Size = 25480191588, Time = 3471.696 ms
    Test #5: Size = 25480191588, Time = 3615.751 ms
    +> Average Time: 3507.065
    
    +> _DirGetSizeFast("C:\windows"):
    Test #1: Size = 25480281792, Time = 1718.998 ms
    Test #2: Size = 25480281584, Time = 1772.851 ms
    Test #3: Size = 25480281584, Time = 1768.355 ms
    Test #4: Size = 25480281401, Time = 1773.633 ms
    Test #5: Size = 25480281401, Time = 1773.868 ms
    +> Average Time: 1761.541
    
    ###############################################
    
    +> DirGetSize("C:\Program Files (x86)"):
    Test #1: Size = 3520794056, Time = 240.376 ms
    Test #2: Size = 3520794056, Time = 209.489 ms
    Test #3: Size = 3520794056, Time = 208.607 ms
    Test #4: Size = 3520794056, Time = 210.673 ms
    Test #5: Size = 3520794056, Time = 207.369 ms
    +> Average Time: 215.303
    
    +> _DirGetSizeEx("C:\Program Files (x86)"):
    Test #1: Size = 3520794056, Time = 203.365 ms
    Test #2: Size = 3520794056, Time = 204.968 ms
    Test #3: Size = 3520794056, Time = 200.874 ms
    Test #4: Size = 3520794056, Time = 203.97 ms
    Test #5: Size = 3520794056, Time = 200.951 ms
    +> Average Time: 202.826
    
    +> _DirGetSizeFast("C:\Program Files (x86)"):
    Test #1: Size = 3516626568, Time = 469.296 ms
    Test #2: Size = 3516627072, Time = 569.003 ms
    Test #3: Size = 3516627576, Time = 563.888 ms
    Test #4: Size = 3516628080, Time = 557.043 ms
    Test #5: Size = 3516628584, Time = 583.873 ms
    +> Average Time: 548.621
    Код:
    ------------------------------------------------------------------------------
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 38132 38131 1 0 0 0
    Файлов : 154925 154925 0 0 0 0
    Байт : 25480281725 25480281725 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 22:33:50
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 38132 38131 1 0 0 0
    Файлов : 154925 154925 0 0 0 0
    Байт : 25480281792 25480281792 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 22:34:26
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 38132 38131 1 0 0 0
    Файлов : 154925 154925 0 0 0 0
    Байт : 25480281584 25480281584 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 22:34:28
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 38132 38131 1 0 0 0
    Файлов : 154925 154925 0 0 0 0
    Байт : 25480281584 25480281584 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 22:34:30
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 38132 38131 1 0 0 0
    Файлов : 154925 154925 0 0 0 0
    Байт : 25480281401 25480281401 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 22:34:31
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 38132 38131 1 0 0 0
    Файлов : 154925 154925 0 0 0 0
    Байт : 25480281401 25480281401 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 22:34:33
    
    
    
    ------------------------------------------------------------------------------
    
    ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 2405 2403 2 0 0 0
    Файлов : 20846 20846 0 0 0 0
    Байт : 3516626064 3516626064 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 22:34:34
    
    
    
    ------------------------------------------------------------------------------
    
    ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 2405 2403 2 0 0 0
    Файлов : 20846 20846 0 0 0 0
    Байт : 3516626568 3516626568 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 22:34:37
    
    
    
    ------------------------------------------------------------------------------
    
    ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 2405 2403 2 0 0 0
    Файлов : 20846 20846 0 0 0 0
    Байт : 3516627072 3516627072 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 22:34:37
    
    
    
    ------------------------------------------------------------------------------
    
    ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 2405 2403 2 0 0 0
    Файлов : 20846 20846 0 0 0 0
    Байт : 3516627576 3516627576 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 22:34:38
    
    
    
    ------------------------------------------------------------------------------
    
    ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 2405 2403 2 0 0 0
    Файлов : 20846 20846 0 0 0 0
    Байт : 3516628080 3516628080 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 22:34:38
    
    
    
    ------------------------------------------------------------------------------
    
    ВсегоСкопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 2405 2403 2 0 0 0
    Файлов : 20846 20846 0 0 0 0
    Байт : 3516628584 3516628584 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 22:34:39
  • Запуск .exe в "D:\" от имени Пользователя:
    Код:
    +> DirGetSize("C:\windows"):    Test #1: Size = 25166100848, Time = 3686.772 ms
    Test #2: Size = 25166100848, Time = 3593.985 ms
    Test #3: Size = 25166100848, Time = 3526.978 ms
    Test #4: Size = 25166100848, Time = 3690.731 ms
    Test #5: Size = 25166100848, Time = 3562.917 ms
    +> Average Time: 3612.277
    
    +> _DirGetSizeEx("C:\windows"):
    Test #1: Size = 25166100848, Time = 3532.261 ms
    Test #2: Size = 25166100848, Time = 3503.862 ms
    Test #3: Size = 25166100848, Time = 3527.316 ms
    Test #4: Size = 25166100848, Time = 3473.429 ms
    Test #5: Size = 25166100848, Time = 3495.842 ms
    +> Average Time: 3506.542
    
    +> _DirGetSizeFast("C:\windows"):
    Test #1: Size = 25166100848, Time = 1780.765 ms
    Test #2: Size = 25166100848, Time = 1891.152 ms
    Test #3: Size = 25166100848, Time = 1840.204 ms
    Test #4: Size = 25166100848, Time = 1820.261 ms
    Test #5: Size = 25166100848, Time = 1824.433 ms
    +> Average Time: 1831.363
    
    ###############################################
    
    +> DirGetSize("D:\"):
    Test #1: Size = 556527309702, Time = 1499.482 ms
    Test #2: Size = 556527309702, Time = 1467.17 ms
    Test #3: Size = 556527309702, Time = 1468.195 ms
    Test #4: Size = 556527309702, Time = 1465.895 ms
    Test #5: Size = 556527309702, Time = 1466.702 ms
    +> Average Time: 1473.489
    
    +> _DirGetSizeEx("D:\"):
    Test #1: Size = 556527309702, Time = 1480.986 ms
    Test #2: Size = 556527309702, Time = 1466.714 ms
    Test #3: Size = 556527309702, Time = 1472.563 ms
    Test #4: Size = 556527309702, Time = 1465.496 ms
    Test #5: Size = 556527309702, Time = 1470.331 ms
    +> Average Time: 1471.218
    
    +> _DirGetSizeFast("D:\"):
    Test #1: Size = 556527309702, Time = 909.091 ms
    Test #2: Size = 556527310226, Time = 942.461 ms
    Test #3: Size = 556527310750, Time = 965.148 ms
    Test #4: Size = 556527311274, Time = 925.899 ms
    Test #5: Size = 556527311798, Time = 963.717 ms
    +> Average Time: 941.263
    Код:
    ------------------------------------------------------------------------------
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 37590 37590 0 0 40 0
    Файлов : 153053 153053 0 0 0 0
    Байт : 25166100848 25166100848 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 23:07:14
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 37590 37590 0 0 40 0
    Файлов : 153053 153053 0 0 0 0
    Байт : 25166100848 25166100848 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 23:07:52
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 37590 37590 0 0 40 0
    Файлов : 153053 153053 0 0 0 0
    Байт : 25166100848 25166100848 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 23:07:53
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 37590 37590 0 0 40 0
    Файлов : 153053 153053 0 0 0 0
    Байт : 25166100848 25166100848 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 23:07:55
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 37590 37590 0 0 40 0
    Файлов : 153053 153053 0 0 0 0
    Байт : 25166100848 25166100848 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 23:07:57
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 37590 37590 0 0 40 0
    Файлов : 153053 153053 0 0 0 0
    Байт : 25166100848 25166100848 0 0 0 0
    Время : 0:00:01 0:00:00 0:00:00 0:00:01
    Окончание: 8 апреля 2020 г. 23:07:59
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 16226 16226 0 0 57 0
    Файлов : 131180 131180 0 0 0 0
    Байт : 556527309178 556527309178 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 23:08:03
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 16226 16226 0 0 56 0
    Файлов : 131180 131180 0 0 0 0
    Байт : 556527309702 556527309702 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 23:08:18
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 16226 16226 0 0 57 0
    Файлов : 131180 131180 0 0 0 0
    Байт : 556527310226 556527310226 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 23:08:19
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 16226 16226 0 0 57 0
    Файлов : 131180 131180 0 0 0 0
    Байт : 556527310750 556527310750 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 23:08:20
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 16226 16226 0 0 57 0
    Файлов : 131180 131180 0 0 0 0
    Байт : 556527311274 556527311274 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 23:08:21
    
    
    
    ------------------------------------------------------------------------------
    
    Всего Скопировано ПропущеноНесоответствие СБОЙДополнения
    Каталогов : 16226 16226 0 0 57 0
    Файлов : 131180 131180 0 0 0 0
    Байт : 556527311798 556527311798 0 0 0 0
    Время : 0:00:00 0:00:00 0:00:00 0:00:00
    Окончание: 8 апреля 2020 г. 23:08:22
 
Последнее редактирование:
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Странная разница в результатах на одной и той же папке...
Возможно при запуске Robocopy создаются некие временные файлы в папке назначения (проверки), отсюда и разница в размере...
 
Верх