I've been doing some testing with long strings and INSTR tests, and it seems that in a limiting case when the strings are of equal length and contain entirely different values (all 1s and all zeros) the INSTR test adds significant execution time, though if the strings are of the same length, and differ in the first byte, there is only one possible result from the INSTR function. Or maybe the results are an artefact of the method?
Code:
#COMPILE EXE #DIM ALL #INCLUDE "WIN32API.INC" %IDD_DIALOG1 = 101 %IDC_LISTBOX1 = 1001 %IDC_LABEL1 = 1002 %IDC_LABEL2 = 1003 %IDC_LISTBOX2 = 1004 '----------------------------------------------------- CALLBACK FUNCTION ShowDIALOG1Proc() LOCAL i, j, l, u AS LONG LOCAL t AS DOUBLE STATIC s,ss AS STRING SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG FOR i = 100 TO 120 j = i*1000000 t = TIMER s = STRING$(j,0) ss = STRING$(j,1) u = TIMER - t l = INSTR(s, ss) t = TIMER -t LISTBOX ADD CBHNDL, %IDC_LISTBOX1, FORMAT$(j, "#,###") + " " + FORMAT$(t,"#,###") + " secs" LISTBOX ADD CBHNDL, %IDC_LISTBOX2, FORMAT$(j, "#,###") + " " + FORMAT$(u,"#,###") + " secs" NEXT END SELECT END FUNCTION '------------------------------------------------------------ FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG LOCAL hDlg AS DWORD DIALOG NEW hParent, "INSTR performance", 155, 119, 376, 121, %WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR _ %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT _ OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD LISTBOX, hDlg, %IDC_LISTBOX1, , 200, 20, 175, 95, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %WS_VSCROLL OR _ %LBS_NOTIFY OR %LBS_HASSTRINGS OR %LBS_USETABSTOPS, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _ %WS_EX_RIGHTSCROLLBAR CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "with INSTR test", 200, 5, 175, 15 CONTROL ADD LABEL, hDlg, %IDC_LABEL2, "without INSTR test", 5, 5, 175, 15 CONTROL ADD LISTBOX, hDlg, %IDC_LISTBOX2, , 5, 20, 175, 95, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %WS_VSCROLL OR _ %LBS_NOTIFY OR %LBS_HASSTRINGS OR %LBS_USETABSTOPS, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _ %WS_EX_RIGHTSCROLLBAR DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt FUNCTION = lRslt END FUNCTION '================================ FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION
Comment