Nett Und vor Allem mit so wenig Code, ich weiß schon warum ich AutoIt liebe
Du könntest auch die Randomness erhöhen (Statt *2, erst mal 2.5 dann 3 etc)
lg,
Spider
p.s. 10 ist aber vielleicht etwas viel
Nett Und vor Allem mit so wenig Code, ich weiß schon warum ich AutoIt liebe
Du könntest auch die Randomness erhöhen (Statt *2, erst mal 2.5 dann 3 etc)
lg,
Spider
p.s. 10 ist aber vielleicht etwas viel
Hey,
Meine Freundin fand die Idee witzig und hat kurzerhand was gezaubert!
Drei mal dürft ihr raten, wer hier abgebildet ist
Gruß,
Spider
Hat doch Micha_he schon geschrieben: Aktueller Wert / Maximaler Wert * 100. In deinem Beispiel: 60 s / 120s * 100% = 50%.
[autoit]ProgressOn("", "")
$iMaxSek = 120
For $i = 0 To $iMaxSek
ProgressSet($i / $iMaxSek * 100, Round($i / $iMaxSek * 100) & "% (" & $i & " Sek)")
Sleep(50)
Next
Sleep(1000)
ProgressOff()
Gruß,
Spider
Hey Make,
Sehr geil das du das durchziehst! Ich habe dir ja geschrieben, dass ich selbst bei der SoftwareChallenge sowohl als Teilnehmer als auch als Veranstalter mitgemacht habe, deswegen würde ich dir gerne noch ein Tipp geben: Ich würde den Server nicht als Include Datei benutzten sondern ich würde den Server eigenständig schreiben und ihn per TCP/IP ansprechbar machen. Dann gibst du ne kleine UDF mit, die die TCP Befehle schon enthalten. Wir benutzten dafür ein einfaches XML Protokoll. Das hat einfach den Vorteil, dass die User nachher einfach nur ihre Scripte abgeben müssen und du kein Wirrwarr hast mit doppelten Funktionsaufrufen.
Wenn du willst kann ich dir da ein wenig helfen, wenn du Hilfe brauchst, außerdem kann ich dir gern per PM mal den AutoIt Sourcecode meiner damaligen Clients zu schicken.
Gruß,
Spider
Hey,
Meine Uni bietet sowas ähnliches an für Schulklassen. Heißt "Software Challenge" und findet Jährlich statt. Die Idee dahinter ist ähnlich deiner: Es werden simple Brettspiele genommen, wie z.B. Mensch Ärgere Dich Nicht oder Hase & Igel, wir stellen ein Server bereit, der alle Regeln beherrscht und ein Spielfeld und die nötigen Schnittstellen bereitstellt damit die User z.B. die Figuren via figure1.Move (Java) bewegen können. Das ganze hat unsere Uni mittels TCP/IP aufgebaut um alle Programmiersprachen zu beherrschen (ich habe übrigends den ersten Client der SC eingereicht der nicht in Java sondern in AutoIt programmiert war^^). Das Problem an der ganzen Sache: So ein Server bereit zu stellen ist unglaublich aufwendig, selbst wenn du es nur mit einfachen KI's machen willst, die ja aber auch nicht zu einfach werden dürfen (ich denke da z.B. an Tic Tac Toe, nicht dass da sowas zu stande kommt: TTT :D)
Ich finde die Idee sehr gut, aber ich würde es erstmal mit einem ersten Versuch testen um zu überprüfen wie Aufwendig das alles ist; ich wäre auf jeden Fall dabei
Gruß,
Spider
Hey,
StringFormat ist dafür nicht gemacht, da es keine Abfragen kennt. Wenn du es in einer Zeile haben willst (und du die aktuelle Version von AutoIt benutzt) kannst du es aber so lösen:
[autoit]$Text1 = ""
$Text2 = "ho"
MsgBox(0,"", $Text1 & ((($Text1 = "") Or ($Text2 = "")) ? "" : " -- ") & $Text2)
[/autoit]Gruß,
Spider
Hallo,
Der große Vorteil von Objektorientierten Sprachen ist doch die Verschachtelung mehrerer Objekte ineinander (z.B. gui.edit.getdata.toint). Ansonsten ist es tatsächlich nichts anderes als ein leicht veränderter Syntax.
Gruß,
Spider
Hey,
Wirklich sehr genial, danke dir!
Die AutoIt devs sind darauf gekommen Schau dir mal die neuste Beta an. Da gibt es Maps..
Gruß,
Spider
Hallo,
Habe vor einiger Zeit mal was geschrieben was dir bestimmt weiterhilft
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
TCPStartup()
_DownloadBySpeed_SetSpeed(10)
_DownloadBySpeed_GetSpeed()
GUICreate("")
$hSlider = GUICtrlCreateSlider(0, 0, 400, 40)
GUICtrlSetLimit(-1, 1000, 10)
$hProgress = GUICtrlCreateProgress(0, 40, 400, 40)
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
GUISetState()
_DownloadBySpeed("http://ipv4.download.thinkbroadband.com/5MB.zip", @DesktopDir & "\5mb.zip", _Proc)
ToolTip("Done")
While GUIGetMsg() <> -3
WEnd
Func _Proc($iProc)
Local Static $iLastProc = -1
$iProc = Round($iProc)
If $iProc <> $iLastProc Then
$iLastProc = $iProc
GUICtrlSetData($hProgress, $iProc)
EndIf
EndFunc ;==>_Proc
;===============================================================================
;
; Function Name: _DownloadBySpeed
; Description:: Downloads a file by a selected speed (Select speed via _DownloadBySpeed_SetSpeed($iKbytes)
; Parameter(s): $sUrl: URL to file, sFilePath: FilePath, $sProcFunc: ProgressFunction. formed like this: _Prog($iProg) where $iProg is a number between 0-100
; Requirement(s): TCPStartUp()
; Return Value(s): True if okay, Error if not
; Author(s): GtaSpider//Max Reble
;
;===============================================================================
;
Func _DownloadBySpeed($sUrl, $sFilePath, $sProcFunc = False)
;The smaller the buffersize, the more exact is the speed
;But when the Buffersize is too small, it won't work well on high speed
;For example: 10 kByte is okay for 10-1000 kbyte/s, 1kByte is okay for 1-100 kbyte/s and 100kByte is okay for 100-10000 kbyte/s
Local Const $iBuffer = 10 * 1024
Local $aRegEx, $sIP, $hCon, $hOpen, $vRecv, $fConnected = True, $iFileSize, $iRecvByte, $hTimer
$aRegEx = StringRegExp($sUrl, "^(?:(?:http[s]?|ftp):\/)?\/?([^:\/\s]+)(?::([^\/]*))?((\/\w+)*\/.*?)$", 3);$1: Host, $2: Port, $3: Request
If @error Then Return SetError(@error, 1, 0)
If Not $aRegEx[1] Then $aRegEx[1] = 80
$sIP = TCPNameToIP($aRegEx[0])
If @error Then Return SetError(@error, 2, 0)
$hCon = TCPConnect($sIP, $aRegEx[1])
If @error Then Return SetError(@error, 3, 0)
$hOpen = FileOpen($sFilePath, 2 + 16)
If $hOpen <= 0 Then Return SetError(0xff, 4, 0)
$iFileSize = InetGetSize($sUrl)
[/autoit] [autoit][/autoit] [autoit]TCPSend($hCon, "GET " & $aRegEx[2] & " HTTP/1.1" & @CRLF & "Host: " & $aRegEx[0] & @CRLF & @CRLF)
If @error Then Return SetError(@error, 5, 0)
While $fConnected
$hTimer = TimerInit()
$vRecv = TCPRecv($hCon, $iBuffer, 1)
$fConnected = Not @error
$iRecvByte += BinaryLen($vRecv)
FileWrite($hOpen, $vRecv)
If IsFunc($sProcFunc) Then $sProcFunc(100 * $iRecvByte / $iFileSize)
Sleep(($iBuffer * 1000 / _DownloadBySpeed_GetSpeed()) - TimerDiff($hTimer))
WEnd
FileClose($hOpen)
[/autoit] [autoit][/autoit] [autoit]Return True
EndFunc ;==>_DownloadBySpeed
Func _DownloadBySpeed_SetSpeed($iKbytesSpeed = Null)
Local Static $iSpeed = 0
If $iKbytesSpeed = Null Then
Return $iSpeed
Else
$iSpeed = $iKbytesSpeed * 1024
EndIf
EndFunc ;==>_DownloadBySpeed_SetSpeed
Func _DownloadBySpeed_GetSpeed()
Return _DownloadBySpeed_SetSpeed(Null)
EndFunc ;==>_DownloadBySpeed_GetSpeed
Func WM_HSCROLL($hwnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam, $lParam
Local Static $hwndSlider = GUICtrlGetHandle($hSlider)
Local $iSlider
If $iMsg = $WM_HSCROLL And $lParam = $hwndSlider Then
$iSlider = GUICtrlRead($hSlider)
ToolTip($iSlider & " kByte/s")
_DownloadBySpeed_SetSpeed($iSlider)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_HSCROLL
Gruß,
Spider
Hey,
Hilfe anschauen uint16 --> ushort
$tData = DllStructCreate("byte data[1024]")
[/autoit] [autoit][/autoit] [autoit];Hier kommen dann deine TCP Recv Funktion hin
[/autoit] [autoit][/autoit] [autoit];~ $sRecv = TCPRecv(..)
$sRecv = Binary("0x3678696373610000300000000000000030020000020300")
$tData.data = $sRecv
$tCALLBACK_FORCED_ACK = DllStructCreate("char uid[8];char connected_uid[8];char position;byte hardware_version[3]; byte firmware_version[3];ushort device_identifier;byte enumeration_type",DllStructGetPtr($tData))
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite(DllStructGetData($tCALLBACK_FORCED_ACK,"uid") & @CRLF)
[/autoit]Gruß,
Spider
HEy,
Einfach das Binary() wegnehmen oder mit Int()
$tStruct = DllStructCreate("uint convert32;")
DllStructSetData($tStruct, "convert32", 33688)
$uint32 = Binary(DllStructGetData($tStruct, "convert32"))
$default = DllStructGetData($tStruct, "convert32")
ConsoleWrite("Uint32: " & $uint32 & @CRLF)
ConsoleWrite("Default: " & $default & @CRLF)
ConsoleWrite("Uint32 -> Int: " & Int($uint32) & @CRLF)
Gruß,
Spider
Geht auch mit 3.3.8.1 (warum benutzt du die Alte denn noch?)
$tStruct = DllStructCreate("uint convert32; short convert16;byte convert8")
DllStructSetData($tStruct,"convert32",33688)
DllStructSetData($tStruct,"convert16",33688);Achtung! signed short, nicht unsigned short
DllStructSetData($tStruct,"convert8",33688);Passt hinten und vorne nicht. int8 kann nur ein byte (0-255) aufnehmen.
ConsoleWrite(Binary(DllStructGetData($tStruct,"convert32")) & @CRLF)
ConsoleWrite(Binary(DllStructGetData($tStruct,"convert16")) & @CRLF)
ConsoleWrite(Binary(DllStructGetData($tStruct,"convert8")) & @CRLF)
Oder gleich nativ...
$tStruct = DllStructCreate("uint convert32; short convert16;byte convert8")
$tStruct.convert32 = 33688
$tStruct.convert16 = 33688;Achtung! signed short, nicht unsigned short
$tStruct.convert8 = 33688;Passt hinten und vorne nicht. int8 kann nur ein byte (0-255) aufnehmen. Uint8 sollte nicht mehr verwendet werden, gibt es in AutoIt deswegen auch nicht mehr, da müsstest du ggf. selbst Hand anlegen
ConsoleWrite(Binary($tStruct.convert32) & @CRLF)
ConsoleWrite(Binary($tStruct.convert16) & @CRLF)
ConsoleWrite(Binary($tStruct.convert8) & @CRLF)
Hey,
Mit dem Arm hab ich noch keine Erfahrung gehabt, aber mit COM32 und AutoIt Die wohl beste COM Api ist die "CommAPI" Diese ist nämlich nativ und braucht keine extra DLL.
Der Code müsste dann einfach so aussehen:
#include 'CommInterface.au3'
[/autoit] [autoit][/autoit] [autoit]Const $iComport = 3
Const $iBaudrate = 57600
Const $iBits = 8
ConsoleWrite('>Error code: ' & @error & @CRLF & @CRLF & '@@ Trace(9) : $hCommAPI = _CommAPI_OpenCOMPort($iComport, $RS232_Baudrate, 0, $RS232_Bits)' & @CRLF) ;### Trace Console
$hCommAPI = _CommAPI_OpenCOMPort($iComport, $iBaudrate, 0, $iBits)
ConsoleWrite('>Error code: ' & @error & @CRLF & @CRLF & '@@ Trace(12) : _CommAPI_TransmitString($hCommAPI,"s")' & @CRLF) ;### Trace Console
_CommAPI_TransmitString($hCommAPI,"s")
ConsoleWrite('>Error code: ' & @error & @CRLF & @CRLF & '@@ Trace(15) : _CommAPI_CloseHandle($hCommAPI)' & @CRLF) ;### Trace Console
_CommAPI_ClosePort($hCommAPI)
ConsoleWrite('>Error code: ' & @error & @CRLF & @CRLF ) ;### Trace Console
Gruß,
Spider
Hallo,
Schön! Vielen Dank für das Feedback, da kann man sich doch gut was raus holen
GtaSpider : Bei mir erscheint als Ergebnis Deines Testscript auch, das For...Next am schnellsten ist, aber in der Schleife wird ja auch nichts ausgeführt.
Wenn man das Script etwas abwandelt (praxisnäher gestaltet), dann relativiert sich das Ergebnis etwas. For...Next ist zwar noch immer am schnellsten, aber nicht derart krass.
Stimmt; das hab ich nicht beachtet. ToolTip ist Grafisch, hier auch mal mit einer nicht grafischen Funktion
;By GtaSpider
#include <Array.au3>
#Region Hier ggf Daten verändern
Global Const $iNumberOfTestFuncs = 3;Wie viele Funktionen es gibt (werden benannt nach _TestFunc_1, _TestFunc_2, ..., _TestFunc_N)
Global Const $iNumberOfTestRuns = 0xfff;Wie viele Tests pro Funktion
Global Const $aFuncNames[$iNumberOfTestFuncs + 1] = ["", _
"For", _;Funktionsname 1
"While", _;Funktionsname 2
"Do"];Funktionsname 3
Global Const $vParam = 100
[/autoit] [autoit][/autoit] [autoit]Func _TestFunc_1($vParam = False);funktion 1
For $i = 1 To $vParam
Assign("a",$i)
Next
EndFunc ;==>_TestFunc_1
Func _TestFunc_2($vParam = False);funktion 2
Local $i = 0
While $i < $vParam
Assign("a",$i)
$i += 1
WEnd
EndFunc ;==>_TestFunc_2
Func _TestFunc_3($vParam = False);funktion 3
Local $i
Do
Assign("a",$i)
$i+=1
Until $i = $vParam
EndFunc ;==>_TestFunc_3
Func _TestFunc_4($vParam = False);funktion 4
;...
EndFunc ;==>_TestFunc_4
;...
[/autoit] [autoit][/autoit] [autoit]#EndRegion Hier ggf Daten verändern
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
Local $hTimer, $nFuncCounter, $nTestCounter, $iMinIndex, $iMaxIndex, $sCPUname, $aMemStats, $sAutX64
Local $aiTimers[$iNumberOfTestFuncs + 1] = [$iNumberOfTestFuncs]
ConsoleWrite(StringFormat(">Start %d number of funcs á %d number of tests with parameter %s\r\n", $iNumberOfTestFuncs, $iNumberOfTestRuns, $vParam))
[/autoit] [autoit][/autoit] [autoit]For $nFuncCounter = 1 To $iNumberOfTestFuncs
ConsoleWrite(StringFormat(">Start Test %d/%d", $nFuncCounter, $iNumberOfTestFuncs))
$hTimer = TimerInit()
#Region SAFE
For $nCounter = 1 To $iNumberOfTestRuns
Call("_TestFunc_" & $nFuncCounter, $vParam)
Next
$aiTimers[$nFuncCounter] = TimerDiff($hTimer)
#EndRegion SAFE
ConsoleWrite(StringFormat(" --> %f ms\r\n", $aiTimers[$nFuncCounter]))
Next
$iMinIndex = _ArrayMinIndex($aiTimers, 1, 1)
$iMaxIndex = _ArrayMaxIndex($aiTimers, 1, 1)
$sCPUname = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")
$aMemStats = MemGetStats()
$sAutX64 = "x86"
If @AutoItX64 Then $sAutX64 = "x64"
;Geht nicht da wir abwärtskompatibel bleiben sollten. (Ternärer Operator)
;~ ConsoleWrite(StringFormat("\r\n>Result with AutoIt %s %s.\r\n>CPU: %s %s\r\n>RAM: %.2f/%.2f GB\r\n>OS: %s (%d) %s\r\n", @AutoItVersion, (@AutoItX64 ? "x64" : "x86"), $sCPUname, @CPUArch, $aMemStats[2] / 1024 / 1024, $aMemStats[1] / 1024 / 1024, @OSVersion, @OSBuild, @OSArch))
ConsoleWrite(StringFormat("\r\n>Result with AutoIt %s %s.\r\n>CPU: %s %s\r\n>RAM: %.2f/%.2f GB\r\n>OS: %s (%d) %s\r\n>Parameter: %s\r\n", @AutoItVersion, $sAutX64, $sCPUname, @CPUArch, $aMemStats[2] / 1024 / 1024, $aMemStats[1] / 1024 / 1024, @OSVersion, @OSBuild, @OSArch,$vParam))
[/autoit] [autoit][/autoit] [autoit]For $nFuncCounter = 1 To $iNumberOfTestFuncs
Switch $nFuncCounter
Case $iMinIndex
ConsoleWrite("+");schnellster bekommt ein Plus (Grün in SciTE)
Case $iMaxIndex
ConsoleWrite("!");langsamster wird Rot dargestellt
Case Else
ConsoleWrite("-");Neutral Gelb
EndSwitch
ConsoleWrite(StringFormat("Func %s (%d)\tneeds for %d runs %.2f ms (Average: %.4f ms)\t--> ", $aFuncNames[$nFuncCounter], $nFuncCounter, $iNumberOfTestRuns, $aiTimers[$nFuncCounter], $aiTimers[$nFuncCounter] / $iNumberOfTestRuns))
Switch $nFuncCounter
Case $iMinIndex
ConsoleWrite(StringFormat("1.0x\r\n"))
Case Else
ConsoleWrite(StringFormat("%.1fx\r\n", $aiTimers[$nFuncCounter] / $aiTimers[$iMinIndex]))
EndSwitch
Next
ConsoleWrite(StringFormat("\r\n"))
EndFunc ;==>_Main
Hey,
Sorry, da hab ich falsch abgeschrieben. Das erste A muss natürlich klein. Siehst du mit dem Window Info Tool aber auch Da schau dir einfach mal den zweiten Link an den ich oben gepostet hab, da wird das Tool erklärt.
[autoit]WinSetState("[CLASS:MSPaintApp]", "", @SW_MAXIMIZE)
[/autoit]Ja, deswegen heißt es ja SciTE Lite, weil da alle Funktionen draußen sind.. Entweder du holst dir die normale Version oder du machst es per Hand mit ConsoleWrite("Zeile "&@ScriptLineNumber&@CRLF) über/unter jedem Befehl.
Gruß,
Spider
Hey,
Die Klasse von Paint ist nicht Paint sondern "MSPAintApp". Findest du raus mit dem AutoIt Window Tool (das findest du irgendwo im AutoIt ordner unter C:\Programme (x86)\AutoIt".
Ja, in Scite: Tools -> Trace: Add Trace Lines
Im Editor gibt es ganz rechts überhalb des Textfensterns so ein AutoIt zeichen. Da rauf klicken. Oder per hand: [autoit ][/autoit ] (ohne leerzeichen am Ende)
Hast du schonmal in unserem Tutorial vorbei geschaut?
http://wiki.autoit.de/wiki/index.php/Tutorial
In der Hilfe gibt es auch ein erste Schritte Tutorial:
http://translation.autoit.de/onlinehilfe/tu…pad/notepad.htm
lg,
Spider
Hey,
Klar, habt ihr beide recht mit. Irgendwann ist der Algorhytmus (gerade bei sowas wie ein Sniffer) aber Optimiert bis zum geht nicht mehr und dann kann es schon interessant werden ob z.B. GuiCtrlListViewCreate oder _GuiCtrlListView_Create schneller ist. In der Live Darstellung (>30 Aktualisierungen pro Sekunde) geht da bei nicht optimierter Programmierung schnell AutoIt in die Knie (unabhängig vom Prozessor).
Auch wenn ich C und ein großteil von C++ beherrsche, lager ich gerne trotzdem viele einfache Sachen noch in AutoIt aus, ganz einfach wegen der Einfachheit der Sprache.
Ich wollte hier aber auch keine Diskussion auslösen, ob man AutoIt für rechenintensive Vorgänge benutzen sollte oder nicht, manche tuns mehr, manche weniger, die Diskussion hatten wir schon oft genug hier im Forum, also lassen wir es jetzt bitte darauf beruhen.
Falls jemand noch Ideen zur Codeoptimierung hat, natürlich immer gerne her damit
lg,
Spider
Hallo,
Dem kann ich nur bedingt zu stimmen. Natürlich stimmt es, dass AutoIt nicht für wirklich rechenintensive Aufgaben geeignet ist, sehr wohl aber für eine schnelle Benutzeroberfläche, wenn man es richtig angeht.
Ich habe z.B. ein Projekt geschrieben, welches auf einem Low Level PC laufen soll (Atom 1,4 GHz; 1gb ram; win7) und welches Live Daten via WinPcap interpretiert und anzeigt und das in Millisekunden raster. Das habe ich nur geschafft in dem ich an jeder Kleinigkeit herum experimentiert habe um es so effizient wie nur möglich zu gestalten, da hier wirklich sehr viel interpretiert wird.
Klar beim If/Switch Fall ist es relativ egal, man sieht ja das bei einem Aufruf der unterschied bei 0,002 ms ist, aber z.B. die Geschichte mit der For/While Schleife war hier sehr hilfreich und wenn ich nun 50 Interpretationsfunktionen habe, in denen ich alle von While auf For wechsle sind das gut und gerne paar Millisekunden die man direkt merkt.
Ein paar Daten die da durchlaufen müssen allerdings noch entschlüsselt und entpackt werden, das lagere ich natürlich hier auch auf C aus, da hatte AutoIt keine Chance.
Trotzdem: Ich arbeite mit AutoIt nach wie vor sehr gerne wenn es um grafische Angelegenheiten geht, da ist AutoIt C/C++ weit überlegen was die Einfachheit angeht; wenn der Kunde ein Änderungswunsch hat --> kein Problem, eine Stunde später steht die neue GUI.
Deswegen dieser Thread, ich dachte mir falls jemand ein ähnliches Vorhaben hat kann er/sie sich hier paar Tips abholen
Gruß'
Spider
Hey,
Ich wollte hier mal ein kleines Tutorial schreiben, wie man sein Script, wenn es wirklich um jede nanosekunde geht, optimieren kann. Ich würde mir wünschen, das ihr auch was dazu Beiträgt, egal in welchem Bereiech (Sei es nun einfache Funktionen, GDI, GUI, Operatoren, Arrays, ...) - immer alles her damit.
Unten findet ihr ein Script mit dem ihr es testen könnt und eure Ergebnisse teilen könnt:
Ich mache mal den Anfang:
Zitat>Result with AutoIt 3.3.12.0 x86.
>CPU: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz X64
>RAM: 4.97/7.94 GB
>OS: WIN_81 (9600) X64
Bei den If/Switch/Select gibt es kaum ein unterschied mittlerweile wobei es bei If abhängig davon ist, ob die expression wahr oder falsch ist, bei Switcht uns Select allerdings nicht. Witzig, weil es früher andersrum war, da hat If Switch um längen geschlagen mittlerweile ist dem nicht mehr so.
Die neuen Ternären Operatoren in der Aktuellen AutoIt Version sind allerdings die schnellsten ($vParam = True ? True : False)
Zitat>Parameter: True
!Func If x = True Then (1) needs for 1048575 runs 3866.03 ms (Average: 0.0037 ms) --> 1.1x
-Func If x <> True Then (2) needs for 1048575 runs 3725.93 ms (Average: 0.0036 ms) --> 1.0x
-Func Switch (3) needs for 1048575 runs 3702.88 ms (Average: 0.0035 ms) --> 1.0x
-Func Select (4) needs for 1048575 runs 3737.54 ms (Average: 0.0036 ms) --> 1.0x
+Func Ternär (5) needs for 1048575 runs 3625.00 ms (Average: 0.0035 ms) --> 1.0x
Zitat>Parameter: False
!Func If x = True Then (1) needs for 1048575 runs 3710.02 ms (Average: 0.0035 ms) --> 1.0x
-Func If x <> True Then (2) needs for 1048575 runs 3691.45 ms (Average: 0.0035 ms) --> 1.0x
-Func Switch (3) needs for 1048575 runs 3667.33 ms (Average: 0.0035 ms) --> 1.0x
-Func Select (4) needs for 1048575 runs 3698.65 ms (Average: 0.0035 ms) --> 1.0x
+Func Ternär (5) needs for 1048575 runs 3578.56 ms (Average: 0.0034 ms) --> 1.0x
For ist am schnellsten, While/Do geben sich nicht viel
Zitat>Parameter: 100
+Func For (1) needs for 4095 runs 842.98 ms (Average: 0.2059 ms) --> 1.0x
-Func While (2) needs for 4095 runs 1049.78 ms (Average: 0.2564 ms) --> 1.2x
!Func Do (3) needs for 4095 runs 1064.12 ms (Average: 0.2599 ms) --> 1.3x
Sollte selbsterklärend und auch nicht überraschend sein, Begin/EndUpdate schlägt hier alles obwohl die Nativen Funktionen nur kurz dahinter sind
Zitat-Func GUICtrlCreateListViewItem (1) needs for 255 runs 3129.61 ms (Average: 12.2730 ms) --> 1.1x
!Func _GUICtrlListView_AddItem (2) needs for 255 runs 6763.17 ms (Average: 26.5222 ms) --> 2.3x
+Func _GUICtrlListView_AddItem BeginUpdate (3) needs for 255 runs 2901.29 ms (Average: 11.3776 ms) --> 1.0x
DllSructSetData mit Index ist am schnellsten, danach DllstructSetData mit Namen (Bezeichnung). Die in der euen AutoIt Version eingeführte Möglichkeit Strukturen direkt aufzurufen sieht zwar schick aus im Code ist aber am langsamsten ($tStruct.Name = 123)
ZitatAlles anzeigen>Result with AutoIt 3.3.12.0 x86.
>CPU: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz X64
>RAM: 5.43/7.97 GB
>OS: WIN_81 (9600) X64
>Parameter: DllStructCreate("byte abyte;char test[255];double adouble")
-Func For (1) needs for 4095 runs 2120.33 ms (Average: 0.5178 ms) --> 1.1x
+Func While (2) needs for 4095 runs 1960.73 ms (Average: 0.4788 ms) --> 1.0x
!Func Do (3) needs for 4095 runs 2243.12 ms (Average: 0.5478 ms) --> 1.1x
Fortsetzung folgt (hoffentlich auch durch euch )
Gruß,
Spider