Hallo,
ich schreibe gerade ein kleines Script um die Performance von xcopy Prozessen zu berechnen. In diesem Fall: Performance = Dauer des Prozesses.
Es werden vier xcopy Prozesse nacheinander gestartet, jeweils wenn der vorherige beendet ist. Jeder Prozess hat einen eigenen Quell und Zielordner.
Folgendes vorgehen pro Prozess (also viermal):
- Timestamp nehmen
- xcopy starten
- auf Ende warten
- Timestamp nehmen
- Differenz berechnen
- (Zielordner wieder leeren)
Der letzte Schritt löscht den Inhalt des Zielordners um für den nächsten Start des Scripts wieder einen leeren Ordner bereitstellen zu können.
Was mich nun verwirrt: Leere ich den Ordner nach erfolgreichem Kopieren dauert der Kopiervorgang nur knapp halb so lange als wenn ich den Ordner nicht leere. Woran kann das liegen? Ich bin eigentlich recht sicher, dass es nicht an meinem Code liegt!, hab ich irgendwas übersehen?
Wenn etwas unklar ist bitte Fragen, bin gerade zu sehr in der Materie um mich klar auszudrücken befürchte ich.
ich schreibe gerade ein kleines Script um die Performance von xcopy Prozessen zu berechnen. In diesem Fall: Performance = Dauer des Prozesses.
Es werden vier xcopy Prozesse nacheinander gestartet, jeweils wenn der vorherige beendet ist. Jeder Prozess hat einen eigenen Quell und Zielordner.
Folgendes vorgehen pro Prozess (also viermal):
- Timestamp nehmen
- xcopy starten
- auf Ende warten
- Timestamp nehmen
- Differenz berechnen
- (Zielordner wieder leeren)
Der letzte Schritt löscht den Inhalt des Zielordners um für den nächsten Start des Scripts wieder einen leeren Ordner bereitstellen zu können.
Was mich nun verwirrt: Leere ich den Ordner nach erfolgreichem Kopieren dauert der Kopiervorgang nur knapp halb so lange als wenn ich den Ordner nicht leere. Woran kann das liegen? Ich bin eigentlich recht sicher, dass es nicht an meinem Code liegt!, hab ich irgendwas übersehen?
PHP:
For $i = 0 To $N_NUMBER_OF_COPY_PROCESSES - 1 Step +1
$startTimestampArray[$i] = _NowCalc()
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $i = ' & $i & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
$nPidArray[$i] = _CopyDirectory($S_SOURCE_DIR & "_" & ($i + 1), $S_DESTINATION_DIR & "_" & ($i + 1))
; wait for process end
if ProcessWaitClose($nPidArray[$i], $N_WAIT_FOR_PROCESS_CLOSE_TIMEOUT) = 1 Then
$endTimestampArray[$i] = _NowCalc()
; calculate elapsed time for the copy process
$nProcessDurationArray[$i] = _DateDiff('s', $startTimestampArray[$i], $endTimestampArray[$i])
$nProcessDuration += $nProcessDurationArray[$i]
; delete content of target folder
;~ _ClearDirectory($S_DESTINATION_DIR & "_" & ($i + 1))
Else
_Log("Wait for end of xcopy process timeout expired. PID: " & $nPidArray[$i] & " Timeout: " & $N_WAIT_FOR_PROCESS_CLOSE_TIMEOUT & " seconds")
return -1
EndIf
Next
PHP:
Func _CopyDirectory($sSourceDir, $sDestinationDir)
Local $nPid = Run('xcopy "' & $sSourceDir & '" "' & $sDestinationDir & '" /e', "C:\", @SW_HIDE)
if $nPid <> 0 Then
return $nPid
Else
return -1
EndIf
EndFunc
PHP:
Func _ClearDirectory($sPathToDirectory)
Local $Dirs = _FileListToArray($sPathToDirectory, '*', 2)
Local $Files = _FileListToArray($sPathToDirectory, '*', 1)
If $Dirs <> '' Then
For $x = 1 To $Dirs[0] Step 1
DirRemove($sPathToDirectory & '\' & $Dirs[$x], 1)
Next
EndIf
If Not ($Files = '') Then
For $z = 1 To $Files[0] Step 1
FileSetAttrib($sPathToDirectory & '\' & $Files[$z], "-RHSAO")
FileDelete($sPathToDirectory & '\' & $Files[$z])
Next
EndIf
EndFunc
Wenn etwas unklar ist bitte Fragen, bin gerade zu sehr in der Materie um mich klar auszudrücken befürchte ich.