Quote:
Originally Posted by lolkop
verfügbarkeiten sollten immer ausserhalb von schleifen gesetzt werden...
|
Quote:
Originally Posted by Achat
Bei mehreren verschachtelten For-Schleifen mit mehreren tausend Durchläufen sollte das schon eine Geschwindigkeitssteigerung geben
|
Quote:
Originally Posted by lolkop
in deinem beispielcode, hattest du die variablen deklaration in einer endlosschleife laufen. wenn man bedenkt, das hier jede verzögerung die gesamt-"flüssigkeit" deines programms beeinträchtigt, und in der hauptschleife schnell mal viele tausend befehle ausgeführt werden können, ist es extrem wichtig jeden möglichen überflüssigen befehl zu vermeiden.
sämtliche delays über 100-200ms sind für den user mit bloßem auge sichtbar.
dementsprechend sollte ein schleifendurchlauf der hauptschleife möglichst immer unter 100ms dauern.
|
Habt ihr auch versehentlich *hust* Variablen in Schleifen, etc. deklariert?
Zu viel Code und keine Lust, das alles manuell zu korrigieren? (besonders bei MustDeclareVars )
Dann ist das hier genau das Richtige für euch:
Code:
#include <Array.au3>
_VarExtract()
; #FUNCTION# ====================================================================================================================
; Name ..........: _VarExtract
; Description ...: Extract declared Variables and puts them on top
; Parameters ....: $sData (Default = Default)
; Return values .: none (ClipPut)
; Author ........: Achat
; Remarks .......: Use at your own risk.
; ===============================================================================================================================
Func _VarExtract($sData = Default)
If IsKeyword($sData) Then $sData = ClipGet()
Local $aRegExp = StringRegExp($sData, '(?i)(?:(?:global|local|const|static|enum)+\s)+(?:\$\w+[^\[][,\s]+)+', 3)
If Not IsArray($aRegExp) Then Return SetError(1, 0, 0)
Local $iDeclared = UBound($aRegExp)
_ArraySortByLength($aRegExp)
For $i = 0 To UBound($aRegExp) - 1
$sData = StringReplace($sData, $aRegExp[$i], StringRegExpReplace($aRegExp[$i], '(?i)(global|local|const|static|enum)', ''), 0, 1)
$aRegExp[$i] = StringRegExpReplace($aRegExp[$i], '\s*$', '')
Next
$aRegExp = _ArrayUnique($aRegExp)
_ArraySort($aRegExp)
ClipPut(_ArrayToString($aRegExp, @CRLF, 1) & @CRLF & $sData)
MsgBox(0, 'Done', $iDeclared & ' variables declared, ' & UBound($aRegExp) - 1 & ' unique.' & @CRLF & 'Now go back to your script and press Ctrl+V.')
EndFunc ;==>_VarExtract
; #FUNCTION# ====================================================================================================================
; Name ..........: _ArraySortByLength
; Description ...: Sort an 1D-Array by length
; Parameters ....: ByRef $aArray
; ...............: $iDescending (Default = 1) - 1 - Sort descending
; ...............: $iStart (Default = 0) - Index of array to start sorting at
; ...............: $iEnd (Default = 0) - Index of array to stop sorting at
; Return values .: sorted array
; Author ........: Achat
; Remarks .......: requires #include <Array.au3> (Function _ArraySort)
; ===============================================================================================================================
Func _ArraySortByLength(ByRef $aArray, $iDescending = 1, $iStart = 0, $iEnd = 0)
If Not IsArray($aArray) Then Return SetError(1, 0, 0)
If UBound($aArray, 0) <> 1 Then Return SetError(2, 0, 0)
Local $aSort[UBound($aArray)][2]
For $i = 0 To UBound($aSort) - 1
$aSort[$i][0] = $aArray[$i]
$aSort[$i][1] = Int(StringLen($aArray[$i]))
Next
_ArraySort($aSort, $iDescending, $iStart, $iEnd, 1)
For $i = 0 To UBound($aSort) - 1
$aArray[$i] = $aSort[$i][0]
Next
Return $aArray
EndFunc ;==>_ArraySortByLength
Anleitung:
Mein Script und euer Script öffnen, in eurem Script den Teil markieren, der korrigiert werden soll, danach mein Script ausführen, daraufhin zurück in euer Script wechseln und den markierten Teil mit Strg+V überschreiben.
Die Variablen befinden sich nun ganz oben.
Beispiel:
Code:
;Vorher
Func _LOL()
While 1
Local $LOL = True
For $i = 0 To 100
Local $LOL = False
Next
Local $LOL = 12345
Local $LOL -= 10
WEnd
EndFunc ;==>_LOL
;Nachher
Func _LOL()
Local $LOL
While 1
$LOL = True
For $i = 0 To 100
$LOL = False
Next
$LOL = 12345
$LOL -= 10
WEnd
EndFunc ;==>_LOL
MfG