• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[AutoIt] Performance von xcopy messen

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
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?

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.
 

lupo1977

Neu angemeldet

Registriert
26 Juli 2013
Beiträge
1
Schwer zu sagen woran das liegen koennte. Kann mir aber vorstellen das es mit dem Filesystem zu tun hat. Vielleicht wird beim ersten Kopiervorgang der freie Platz erstmal zusammengesucht. Beim zweiten mal ist dann schon genug Luft entstanden und er Algorithmus kann schneller laufen. Ist aber nur ne Vermutung.
 

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
  • Thread Starter Thread Starter
  • #5
Ändert nichts am Verhalten. Zeit bleibt gleich egal ob normales oder sicheres Löschen.
 

KippaKong

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
158
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?
Wenn noch Files im Zielordner liegen, dann muss xcopy bei jedem File entscheiden ob es überschrieben werden soll.
Wenn der Zielordner leer ist, dann entfällt dieser Schritt.
Mich wundert eh, dass du mit xcopy /e automatisiert überschreiben kannst.
Hast du die Option /y in der Umgebungsvariable COPYCMD gesetzt?
 

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
  • Thread Starter Thread Starter
  • #7
Bevor das Skript die eigentlichen Kopiervorgänge startet wird eh nochmal alles aus den Zielordnern gelöscht um ein Überschreiben zu verhindern. D.h. Ausgangszustand sind immer leere Zielordner damit auch tatsächlich nicht überschrieben wird. Daher ist der Löschprozess direkt nach dem Reinkopieren eigentlich auch redundant, mich wunderts nur, dass es sich so auswirkt.

Die Parameter von xcopy hab ich mitlerweile auf /O /X /E /H /K abgeändert, damit auch Schreibgeschützte Daten kopiert werden.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
du kopierst aber immer die gleiche / gleichen dateien oder?
Die Datei hällt Windows 7 (falls es win7 ist ;)) im Cache vor und muss diese nicht noch mal in den Ram kopieren > kann schneller geschrieben werden.
Kann man recht gut im Recourcenmonitor sehen - unter Arbeitsspeicher sieht man einen schönen bunten Balken bei dem sich der "Standby" Anteil verändert wenn man größere Dateien kopiert.
 

KippaKong

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
158
Diese Cache-Geschichte kann man anscheinend mit Parameter /J abschalten.
Laut Doku erst ab Windows Server 2008 R2 verfügbar. Müsste demnach auch ab Windows 7 SP1 drin sein?
 

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
  • Thread Starter Thread Starter
  • #10
Verstehe den Zusammenhang mit dem RAM hier nicht.

Ich habe vier Ordner (Source1, Source2, Source3, Source4) darin befinden sich jeweils die selben Daten. Diese werden dann nacheinander in die passenden Zielordner Destination1 - 2 - 3 & 4 kopiert. Hier ist es doch für den RAM unerheblich ob ich die Daten direkt nach jedem Kopiervorgang aus dem Destination Ordner lösche oder erst wenn alle vier kopiert sind. Ich würde denken, dass Windows die Daten in beiden Fällen im RAM belässt? Sehe da keinen Zusammenhang.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
irgendwie blicke ich glaube ich nu auch nich mehr durch :D
Wann geht es doppelt so schnell? Wenn du den Ordner nach jedem kopieren löscht - oder wenn du am Ende löscht?
Wenn du nach dem kopieren das Ziel gleich wieder löscht geht der Cache evtl. davon aus das du die Datei nicht mehr brauchst und löscht sie von dort - dann müsste es aber langsamer sein wenn du immer gleich nach dem kopieren löscht.
Sonst ergibt das wirklich keinen Sinn :D
 

War-10-ck

střelec
Veteran

Registriert
14 Juli 2013
Beiträge
5.952
Ort
Schießstand
  • Thread Starter Thread Starter
  • #12
Jap full ack. :D Es wird schneller wenn ich nach dem Kopieren direkt lösche. Ich mach mal eine kleine Skizze wie es abläuft.

Hier das schnelle:

Lösche den Inhalt von Destination 1 2 3 4
Kopiere Daten von Source1 nach Destination1
Lösche Daten in Destination1
Kopiere Daten von Source2 nach Destination2
Lösche Daten in Destination2
Kopiere Daten von Source3 nach Destination3
Lösche Daten in Destination3
Kopiere Daten von Source4 nach Destination4
Lösche Daten in Destination4

-----------------------------------------------

Und hier das langsame:

Lösche den Inhalt von Destination 1 2 3 4
Kopiere Daten von Source1 nach Destination1
Kopiere Daten von Source2 nach Destination2
Kopiere Daten von Source3 nach Destination3
Kopiere Daten von Source4 nach Destination4
 

Larius

OutOfOrder

Registriert
12 Juli 2013
Beiträge
5.792
Du kopierst was von Source1 nach Destination1 und dann löscht du es? o.O
 

Larius

OutOfOrder

Registriert
12 Juli 2013
Beiträge
5.792
Achso, ich hätte den Anfangpost genauer lesen sollen, das war ja das gewünschte Ziel. Mea Culpa.
 
Oben