Что нового

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 381
Репутация
2 381
До сих пор использовал версию _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 319
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 381
Репутация
2 381
madmasles [?]
В результате (у меня) та функция, которая проверяется второй всегда отрабатывает быстрее первой. Почему?
Это только при первом запуске (с одного скрипта на одну и туже папку), или нет?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
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 381
Репутация
2 381
madmasles [?]
На одну и ту же папку запускал раз по 10 с интервалом ~30 секунд, меняя функции местами.
А если ещё кроме этого, поставить паузу в секунду в начало скрипта?


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

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

madmasles

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

CreatoR

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

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

Malderin

Новичок
Сообщения
59
Репутация
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 381
Репутация
2 381
Ещё один быстрый(?) вариант получения размера папки:

Код:
$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

Меценат
Меценат
Сообщения
166
Репутация
55
Кто то может протестировать у себя?
Вот что показал такой тест:
Код:
;========= Для предотвращения ложного теста
_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

Меценат
Меценат
Сообщения
166
Репутация
55
насчёт стабильности получения данных?
Стабильность-то пока не глючит...

Для получения более объективных результатов скомпилировал скрипт ниже:
Код:
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 381
Репутация
2 381
вроде все логи предоставил.
Да извиняюсь, не обратил внимания.
Обратите внимание на разброс в "$Size".
Странно, а можно посмотреть что выдаёт Stdout в _DirGetSizeFast (в том примере где разница в результатах)?
Мне кажется там два значения, возможно первое это типа "Размер", а второе это "Размер на диске".
 

xXx

Меценат
Меценат
Сообщения
166
Репутация
55
И так, повторяем такие же операции, только на другом ПК.
Проблемные случаи:
  • Запуск .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 381
Репутация
2 381
Странная разница в результатах на одной и той же папке...
Возможно при запуске Robocopy создаются некие временные файлы в папке назначения (проверки), отсюда и разница в размере...
 
Верх