# [Solved] Calculate/Compare Functions speed ?

## Recommended Posts

Hey

I've these two functions to do a base64 conversation , Is there any way to compare the exact speed of both of them ?

```Func _Base64Encode(\$input)

\$input = Binary(\$input)

Local \$struct = DllStructCreate("byte[" & BinaryLen(\$input) & "]")

DllStructSetData(\$struct, 1, \$input)

Local \$strc = DllStructCreate("int")

Local \$a_Call = DllCall("Crypt32.dll", "int", "CryptBinaryToString", _
"ptr", DllStructGetPtr(\$struct), _
"int", DllStructGetSize(\$struct), _
"int", 1, _
"ptr", 0, _
"ptr", DllStructGetPtr(\$strc))

If @error Or Not \$a_Call[0] Then
Return SetError(1, 0, "") ; error calculating the length of the buffer needed
EndIf

Local \$a = DllStructCreate("char[" & DllStructGetData(\$strc, 1) & "]")

\$a_Call = DllCall("Crypt32.dll", "int", "CryptBinaryToString", _
"ptr", DllStructGetPtr(\$struct), _
"int", DllStructGetSize(\$struct), _
"int", 1, _
"ptr", DllStructGetPtr(\$a), _
"ptr", DllStructGetPtr(\$strc))

If @error Or Not \$a_Call[0] Then
Return SetError(2, 0, ""); error encoding
EndIf

Return DllStructGetData(\$a, 1)

EndFunc   ;==>_Base64Encode```

```Func _Base64Encode(\$sData)
Local \$oXml = ObjCreate("Msxml2.DOMDocument")
If Not IsObj(\$oXml) Then
SetError(1, 1, 0)
EndIf

Local \$oElement = \$oXml.createElement("b64")
If Not IsObj(\$oElement) Then
SetError(2, 2, 0)
EndIf

\$oElement.dataType = "bin.base64"
\$oElement.nodeTypedValue = Binary(\$sData)
Local \$sReturn = \$oElement.Text

If StringLen(\$sReturn) = 0 Then
SetError(3, 3, 0)
EndIf

Return \$sReturn
EndFunc   ;==>_Base64Encode```

Edited by DrAhmed

##### Share on other sites

@DrAhmed look at TimerInit() and TimerDiff() in the help file. You should be able to add that in to each of your functions to get an idea of the time they take.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

##### Share on other sites
28 minutes ago, JLogan3o13 said:

@DrAhmed look at TimerInit() and TimerDiff() in the help file. You should be able to add that in to each of your functions to get an idea of the time they take.

Could you give me an example please ?

##### Share on other sites

@DrAhmed There is an awesome example...in the help file for TimerDiff:

Add a TimerInit() to the top of your function, and then a TimerDiff right before your Return statement, done.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

##### Share on other sites

Hello.

```#include <String.au3>

Local \$sString = _StringRepeat("Hello Word", 1000)
Local \$hTimer = TimerInit()
For \$i = 1 To 100
_Base64Encode(\$sString)
Next
Local \$iDiff = TimerDiff(\$hTimer)

ConsoleWrite("_Base64Encode time elapsed: " & \$iDiff & @CRLF)

\$hTimer = TimerInit()
For \$i = 1 To 100
_Base64EncodeMsxml(\$sString)
Next
\$iDiff = TimerDiff(\$hTimer)

ConsoleWrite("_Base64EncodeMsxml time elapsed: " & \$iDiff & @CRLF)```

Saludos

AutoIt...

##### Share on other sites

Not exactly the "teach a man to fish" method, @Danyfirex

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

##### Share on other sites
15 minutes ago, JLogan3o13 said:

Not exactly the "teach a man to fish" method, @Danyfirex

mine is more like let them choose if want to learn  or want just the fish till teacher dies. lol

Saludos

AutoIt...

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

• ### Similar Content

• By Dan_555
Hi, here are few functions for the ListBox.
I have searched the forum, but most of the functions are for listview, so i took one example code from melba23 (clear selection) and
wrote few more functions. (Because my current project needs them).

These functions work only on a Multi-selection ListBox .
The functions do: Clear Selection, Delete Selected items, Invert Selection, Move selected items up and down.
The example code has 2 Listboxes. The selected items on the left ListBox can be moved up and down. The right Listbox has buttons for the other functions.
#include <GUIConstantsEx.au3> #include <GuiListBox.au3> #include <WindowsConstants.au3> Global \$hForm1 = GUICreate("Listbox test", 349, 287) \$LB_1 = GUICtrlCreateList("", 6, 40, 157, 244, BitOR(\$LBS_NOTIFY, \$LBS_MULTIPLESEL, \$WS_HSCROLL, \$WS_VSCROLL, \$LBS_DISABLENOSCROLL)) \$LB_2 = GUICtrlCreateList("", 179, 40, 157, 244, BitOR(\$LBS_NOTIFY, \$LBS_MULTIPLESEL , \$WS_HSCROLL, \$WS_VSCROLL, \$LBS_DISABLENOSCROLL)) \$BL_1 = GUICtrlCreateButton("Up", 20, 3, 35, 18) \$BL_2 = GUICtrlCreateButton("Down", 60, 3, 35, 18) \$BR_1 = GUICtrlCreateButton("Up", 200, 3, 35, 18) \$BR_2 = GUICtrlCreateButton("Down", 240, 3, 35, 18) \$BR_3 = GUICtrlCreateButton("Reverse Sel", 272, 22, 68, 17) \$BR_4 = GUICtrlCreateButton("Clear Sel", 217, 22, 52, 17) \$BR_5 = GUICtrlCreateButton("Delete", 175, 22, 40, 17) \$BR_6 = GUICtrlCreateButton("Populate", 290, 3, 50, 18) GUISetState(@SW_SHOW) For \$x = 0 To 50 If \$x <= 10 Then GUICtrlSetData(\$LB_1, \$x & " test", 0) GUICtrlSetData(\$LB_2, \$x & " Test", 0) Next While 1 \$nMsg = GUIGetMsg() Switch \$nMsg Case \$GUI_EVENT_CLOSE Exit Case \$BL_1 \$a = Listbox_ItemMoveUD(\$LB_1, -1) If \$a > -1 Then WinSetTitle(\$hForm1, "", "Moved items: " & \$a) Case \$BL_2 \$a = Listbox_ItemMoveUD(\$LB_1, 1) If \$a > -1 Then WinSetTitle(\$hForm1, "", "Moved items: " & \$a) Case \$BR_1 Listbox_ItemMoveUD(\$LB_2, -1) Case \$BR_2 Listbox_ItemMoveUD(\$LB_2, 1) Case \$BR_3 Listbox_ReverseSelection(\$LB_2) Case \$BR_4 Listbox_ClearSelection(\$LB_2) Case \$BR_5 Listbox_DeleteSelectedItems(\$LB_2) Case \$br_6 ;Populate GUICtrlSetData(\$LB_2, "") ; Clears the listbox For \$x = 0 To 50 GUICtrlSetData(\$LB_2, \$x & " Test", 0) Next EndSwitch WEnd ;note \$hLB_ID - is the Listbox id Func Listbox_DeleteSelectedItems(\$hLB_ID) local \$aSel = _GUICtrlListBox_GetSelItems(\$hLB_ID) Local \$i For \$i = \$aSel[0] To 1 Step -1 _GUICtrlListBox_DeleteString(\$hLB_ID, \$aSel[\$i]) Next EndFunc ;==>Listbox_DeleteSelectedItems Func Listbox_ClearSelection(\$hLB_ID) Local \$aSel = _GUICtrlListBox_GetSelItems(\$hLB_ID) ;Code from Melba23 - Autoit Forum For \$i = 1 To \$aSel[0] _GUICtrlListBox_SetSel(\$hLB_ID, \$aSel[\$i], False) Next EndFunc ;==>Listbox_ClearSelection Func Listbox_ReverseSelection(\$hLB_ID) Local \$i Local \$aCou = _GUICtrlListBox_GetCount(\$hLB_ID) Local \$cSel = _GUICtrlListBox_GetCaretIndex(\$hLB_ID) ;Save the caret For \$i = 0 To \$aCou _GUICtrlListBox_SetSel(\$hLB_ID, \$i, Not (_GUICtrlListBox_GetSel(\$hLB_ID, \$i))) Next _GUICtrlListBox_SetCaretIndex(\$hLB_ID, \$cSel) ;Restore the caret EndFunc ;==>Listbox_ReverseSelection Func Listbox_ItemMoveUD(\$hLB_ID, \$iDir = -1) ;Listbox_ItemMoveUD - Up/Down - Works only on multiple selection listbox (\$LBS_MULTIPLESEL) ;\$iDir: -1 up, 1 down ;Return values -1 nothing to do, 0 nothing moved, >0 performed moves Local \$iCur, \$iNxt, \$aCou, \$aSel, \$i, \$m = 0 ;Current, next, Count, Selection, loop , movecount \$aSel = _GUICtrlListBox_GetSelItems(\$hLB_ID) ;Put selected items in an array \$aCou = _GUICtrlListBox_GetCount(\$hLB_ID) ;Get total item count of the listbox WinSetTitle (\$hForm1,"",\$aSel[0]) Select Case \$iDir = -1 ;Move Up For \$i = 1 To \$aSel[0] If \$aSel[\$i] > 0 Then \$iNxt = _GUICtrlListBox_GetText(\$hLB_ID, \$aSel[\$i] - 1) ;Save the selection index - 1 text _GUICtrlListBox_ReplaceString(\$hLB_ID, \$aSel[\$i] - 1, _GUICtrlListBox_GetText(\$hLB_ID, \$aSel[\$i])) ;Replace the index-1 text with the index text _GUICtrlListBox_ReplaceString(\$hLB_ID, \$aSel[\$i], \$iNxt) ;Replace the selection with the saved var \$m = \$m + 1 EndIf Next For \$i = 1 To \$aSel[0] ;Restore the selections after moving If \$aSel[\$i] > 0 Then _GUICtrlListBox_SetSel(\$hLB_ID, \$aSel[\$i] - 1, 1) EndIf Next Return \$m Case \$iDir = 1 ;Move Down If \$aSel[0] > 0 Then For \$i = \$aSel[0] To 1 Step -1 If \$aSel[\$i] < \$aCou - 1 Then \$iNxt = _GUICtrlListBox_GetText(\$hLB_ID, \$aSel[\$i] + 1) _GUICtrlListBox_ReplaceString(\$hLB_ID, \$aSel[\$i] + 1, _GUICtrlListBox_GetText(\$hLB_ID, \$aSel[\$i])) _GUICtrlListBox_ReplaceString(\$hLB_ID, \$aSel[\$i], \$iNxt) \$m = \$m + 1 EndIf Next EndIf For \$i = \$aSel[0] To 1 Step -1 ;Restore the selections after moving If \$aSel[\$i] < \$aCou - 1 Then _GUICtrlListBox_SetSel(\$hLB_ID, \$aSel[\$i] + 1, 1) EndIf Next Return \$m EndSelect Return -1 EndFunc ;==>Listbox_ItemMoveUD

• Hi guys, i want to convert WebKit/Chrome timestamps that i've found in chrome cookie database to Human-Readable time (if possible, with UTC or GMT offset).
Example of WebKit/Chrome timestamp: 13228999534132232 Output that i want: 2020-03-18 20:16:56 This site has a tool to do this work, but i wonder how to convert this time (this timestamp's time bases are 1600/01/01) to human-readable time:
https://www.epochconverter.com/webkit

• This topic give you access to an AutoIt functions library I maintain which is called PAL, Peter's AutoIt Library. The latest version 1.20 contains 197 functions divided into these topics:
window, desktop and monitor mouse and GUI GUI controls including graphical buttons (jpg, png) logics and mathematics include constants string, xml string and file string dialogues and progress bars data lists: lists, stacks, shift registers and key maps (a.ka. dictionaries) miscellaneous: logging/debugging, process and system info Change log and files section  on the PAL website (SourceForge).
A lot of these functions were created in the development of Peace, Peter's Equalizer APO Configuration Extension, which is a user interface for the system-wide audio driver called Equalizer APO.
• By Rabu
I want to use the winsock overlapped/completion routine method of i/o, but how do I get the pointer to my user function.  I know it is possible because when using the old method of windows messages, the user function name was used instead of a pointer.
• By Inpho
Hi All,
I intend on keeping custom functions/UDFs (works in progress) here; if anyone wants to use any code, feel free.
String functions:
#AutoIt3Wrapper_AU3Check_Parameters=-d -w- 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include-once ; #FUNCTION# ==================================================================================================================== ; Name ..........: _DateTimeGet ; Description ...: Returns the date and time formatted for use in sortable filenames, logs, listviews, etc. ; Syntax ........: _DateTimeGet(iType = 1[, \$bHumanFormat = False]) ; Parameters ....: \$iType - [optional] an integer value. Default is 1. ; 1 - Date and time in file-friendly format; 20190115_113756 ; 2 - Date in file-friendly format; 20190115 ; 3 - Time in file friendly format; 113756 ; \$bHumanFormat - [optional] a boolean value. Default is False. ; True - Includes slashes in the date and colons in the time with a space inbetween ; False - No slashes or colons included with an underscore inbetween ; Return values .: Success - String ; Failure - Sets @error to non-zero and returns an empty string ; Author ........: Sam Coates ; =============================================================================================================================== Func _DateTimeGet(\$iType = 1, \$bHumanFormat = False) If \$iType < 1 Or \$iType > 3 Then Return (SetError(-1, 0, "")) ;; Param1: ;; 1 = Date and time in file friendly format: 20190115_113756 ;; 2 = Date in file friendly format: 20190115 ;; 3 = Time in file friendly format: 113756 ;; Param2: ;; True = Use human-readable format: 15/01/2019 11:37:56 Local \$sTime = @HOUR & ":" & @MIN & ":" & @SEC Local \$sDate = @MDAY & "/" & @MON & "/" & @YEAR If \$iType = 1 Then If \$bHumanFormat = False Then \$sTime = StringReplace(\$sTime, ":", "") \$sDate = StringReplace(\$sDate, "/", "") \$sDate = StringTrimLeft(\$sDate, 4) & StringMid(\$sDate, 3, 2) & StringLeft(\$sDate, 2) Return (\$sDate & "_" & \$sTime) Else Return (\$sDate & " " & \$sTime) EndIf ElseIf \$iType = 2 Then If \$bHumanFormat = False Then \$sDate = StringReplace(\$sDate, "/", "") \$sDate = StringTrimLeft(\$sDate, 4) & StringMid(\$sDate, 3, 2) & StringLeft(\$sDate, 2) EndIf Return (\$sDate) ElseIf \$iType = 3 Then If \$bHumanFormat = False Then \$sTime = StringReplace(\$sTime, "/", "") EndIf Return (\$sTime) EndIf EndFunc ;==>_DateTimeGet ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFileExtension ; Description ...: Returns a file extension from a filename/FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFileExtension(\$sPath) ; Parameters ....: \$sPath - a string value. ; Return values .: Success - String ; Failure - Empty string as returned from StringTrimLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFileExtension(\$sPath) Return (StringTrimLeft(\$sPath, StringInStr(\$sPath, ".", 0, -1))) EndFunc ;==>_FileToFileExtension ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFileName ; Description ...: Returns a filename from a FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFileName(\$sPath[, \$bIncludeExtension = True]) ; Parameters ....: \$sPath - a string value. ; \$bIncludeExtension - [optional] a boolean value. Default is True. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFileName(\$sPath, \$bIncludeExtension = True) Local \$sReturn = StringTrimLeft(\$sPath, StringInStr(\$sPath, "\", 0, -1)) If \$bIncludeExtension = False Then \$sReturn = StringLeft(\$sReturn, StringInStr(\$sReturn, ".", 0, -1) - 1) Return (\$sReturn) EndFunc ;==>_FileToFileName ; #FUNCTION# ==================================================================================================================== ; Name ..........: _FileToFilePath ; Description ...: Returns a folder path from a FQPN (Fully Qualified Path Name) ; Syntax ........: _FileToFilePath(\$sPath) ; Parameters ....: \$sPath - a string value. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _FileToFilePath(\$sPath) Return (StringLeft(\$sPath, StringInStr(\$sPath, "\", 0, -1) - 1)) EndFunc ;==>_FileToFilePath ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringLeft ; Description ...: Searches for a string inside a string, then removes everything on the right of that string ; Syntax ........: _StringLeft(\$sString, \$sRemove[, \$iCaseSense = 0, \$iOccurrence = 1]) ; Parameters ....: \$sString - a string value. The string to search inside. ; \$sRemove - a string value. The string to search for. ; \$iCaseSense - an integer value. Flag to indicate if the operations should be case sensitive. ; \$iOccurrence - an integer value. Which occurrence of the substring to find in the string. Use a ; negative occurrence to search from the right side. ; Return values .: Success - String ; Failure - Empty string as returned from StringLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _StringLeft(\$sString, \$sRemove, \$iCaseSense = 0, \$iOccurrence = 1) Return (StringLeft(\$sString, StringInStr(\$sString, \$sRemove, \$iCaseSense, \$iOccurrence) - 1)) EndFunc ;==>_StringLeft ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringRandom ; Description ...: Returns a string of random characters ; Syntax ........: _StringRandom(\$iAmount[, \$iType = 1]) ; Parameters ....: \$iAmount - an integer value. Length of returned string ; \$iType - [optional] an integer value. Default is 1. ; 1 - Return digits (0-9) ; 2 - Return hexadecimal (0-9, A - F) ; 3 - Return Alphanumeric upper (0-9, A - Z) ; 4 - Return Alphanumeric (0-9, A - Z, a - z) ; 5 - Return Alpha upper (A - Z) ; 6 - Return Alpha (A - Z, a - z) ; Return values .: Success - String ; Failure - Empty string and @error flag as follows: ; @error : 1 - \$iAmount is not a positive integer ; 2 - \$iType is out of bounds ; Author ........: Sam Coates ; =============================================================================================================================== Func _StringRandom(\$iAmount, \$iType = 1) If \$iAmount < 1 Or IsInt(\$iAmount) = 0 Then Return (SetError(-1, 0, "")) Local \$sString = "" Local \$iRandomLow = 1, \$iRandomHigh = 62 #Tidy_Off Local Static \$aCharId[63] = [0, Chr(48), Chr(49), Chr(50), Chr(51), Chr(52), Chr(53), Chr(54), Chr(55), Chr(56), Chr(57), Chr(65), Chr(66), Chr(67), _ Chr(68), Chr(69), Chr(70), Chr(71), Chr(72), Chr(73), Chr(74), Chr(75), Chr(76), Chr(77), Chr(78), Chr(79), Chr(80), _ Chr(81), Chr(82), Chr(83), Chr(84), Chr(85), Chr(86), Chr(87), Chr(88), Chr(89), Chr(90), Chr(97), Chr(98), Chr(99), _ Chr(100), Chr(101), Chr(102), Chr(103), Chr(104), Chr(105), Chr(106), Chr(107), Chr(108), Chr(109), Chr(110), Chr(111), _ Chr(112), Chr(113), Chr(114), Chr(115), Chr(116), Chr(117), Chr(118), Chr(119), Chr(120), Chr(121), Chr(122)] #Tidy_On If \$iType = 1 Then ;; digits: 1 - 10 \$iRandomHigh = 10 ElseIf \$iType = 2 Then ;; hexadecimal: 1 - 16 \$iRandomHigh = 16 ElseIf \$iType = 3 Then ;; alnumupper: 1 - 36 \$iRandomHigh = 36 ElseIf \$iType = 4 Then ;; alnum: 1 - 62 \$iRandomHigh = 62 ElseIf \$iType = 5 Then ;; alphaupper: 11 - 36 \$iRandomLow = 11 \$iRandomHigh = 36 ElseIf \$iType = 6 Then ;; alpha: 11 = 62 \$iRandomLow = 11 \$iRandomHigh = 62 Else Return (SetError(-2, 0, "")) EndIf For \$i = 1 To \$iAmount \$sString &= \$aCharId[Random(\$iRandomLow, \$iRandomHigh, 1)] ;; append string with corresponding random character from ascii array Next Return (\$sString) EndFunc ;==>_StringRandom ; #FUNCTION# ==================================================================================================================== ; Name ..........: _StringTrimLeft ; Description ...: Searches for a string inside a string, then removes everything on the left of that string ; Syntax ........: _StringTrimLeft(\$sString, \$sRemove[, \$iCaseSense = 0, \$iOccurrence = 1]) ; Parameters ....: \$sString - a string value. The string to search inside. ; \$sRemove - a string value. The string to search for. ; \$iCaseSense - an integer value. Flag to indicate if the operations should be case sensitive. ; \$iOccurrence - an integer value. Which occurrence of the substring to find in the string. Use a ; negative occurrence to search from the right side. ; Return values .: Success - String ; Failure - Empty string as returned from StringTrimLeft() ; Author ........: Sam Coates ; =============================================================================================================================== Func _StringTrimLeft(\$sString, \$sRemove, \$iCaseSense = 0, \$iOccurrence = 1) Return (StringTrimLeft(\$sString, StringInStr(\$sString, \$sRemove, \$iCaseSense, \$iOccurrence) + StringLen(\$sRemove) - 1)) EndFunc ;==>_StringTrimLeft Examples:
ConsoleWrite(_StringRandom(100, 6) & @CRLF) ConsoleWrite(_StringTrimLeft("C:\Windows\System32\cmd.exe", "C:\Windows\System32\") & @CRLF) ConsoleWrite(_StringLeft("C:\Windows\System32\cmd.exe", "cmd.exe") & @CRLF) ConsoleWrite(_FileToFileName("C:\Windows\System32\cmd.exe") & @CRLF) ConsoleWrite(_FileToFilePath("C:\Windows\System32\cmd.exe") & @CRLF) ConsoleWrite(_FileToFileExtension("C:\Windows\System32\cmd.exe") & @CRLF) ConsoleWrite(_StringRandom(6, 4) & "-" & _StringRandom(4, 4) & "-" & _StringRandom(4, 4) & "-" & _StringRandom(4, 4) & "-" & _StringRandom(6, 4)& @CRLF)
×

• Wiki

• Back

• #### Beta

• Git
• FAQ
• Our Picks
×
• Create New...