10000 loops of the IF takes about 45 seconds, no matter how long the strings are, while the other two take about 2 minute and a half !
-----------------------------------
Since I am writing a GetIndexSubstring and am still optimizing it.
I wanted to know which of these three methods to check if a string is inside another string was the fastest
So I wrote the following code to test
Code: Select all
:IF-versus-FINDSTR
setlocal enabledelayedexpansion
Set "_IVF_Input=THIS IS a TEST"
Set "_IVF_Search=IS"
Set /a _IVF_count=10000
set "_IVF_callback_label=:IF-versus-FINDSTR-1"
GoTo :IF-versus-FINDSTR-loop-start
:IF-versus-FINDSTR-1
Set "_IVF_Input=THIS IS a TEST with many characters 012345689[7000 characters removed here for brevity]012345689"
Set "_IVF_Search=IS"
Set /a _IVF_count=10000
set "_IVF_callback_label=:IF-versus-FINDSTR-2"
GoTo :IF-versus-FINDSTR-loop-start
:IF-versus-FINDSTR-2
:IF-versus-FINDSTR-3
:IF-versus-FINDSTR-4
GoTo :EOF
:IF-versus-FINDSTR-loop-start
Set /a _IVF_index=1
echo start IF TEST %time% count %_IVF_count% search %_IVF_Search% input %_IVF_Input%
:IF-versus-FINDSTR-loop
set "_IVF_buffer=!_IVF_Input:%_IVF_Search%=!
if !_IVF_Input! EQU !_IVF_buffer! ( set "_IVF_result=true" ) else ( set "_IVF_result=false" )
Set /a _IVF_index+=1
if %_IVF_index% LSS %_IVF_count% GoTo :IF-versus-FINDSTR-loop
echo end IF TEST %time% count %_IVF_count% search %_IVF_Search% input %_IVF_Input%
:IF-versus-FIND-loop-loop-start
Set /a _IVF_index=1
echo start FIND TEST %time% count %_IVF_count% search %_IVF_Search% input %_IVF_Input%
:IF-versus-FIND-loop-loop
echo.!_IVF_Input!| find "!_IVF_Search!" >nul && ( set "_IVF_result=true" ) || ( set "_IVF_result=false" )
Set /a _IVF_index+=1
if %_IVF_index% LSS %_IVF_count% GoTo :IF-versus-FIND-loop-loop
echo end FIND TEST %time% count %_IVF_count% search %_IVF_Search% input %_IVF_Input%
:IF-versus-FINDSTR-loop-loop-loop-start
Set /a _IVF_index=1
echo start FINDSTR TEST %time% count %_IVF_count% search %_IVF_Search% input %_IVF_Input%
:IF-versus-FINDSTR-loop-loop-loop
echo.!_IVF_Input!| findstr /c:"!_IVF_Search!" >nul && ( set "_IVF_result=true" ) || ( set "_IVF_result=false" )
Set /a _IVF_index+=1
if %_IVF_index% LSS %_IVF_count% GoTo :IF-versus-FINDSTR-loop-loop-loop
echo end FINDSTR TEST %time% count %_IVF_count% search %_IVF_Search% input %_IVF_Input%
GoTo %_IVF_callback_label%
endlocal
GoTo :EOF
Code: Select all
start IF TEST 2:11:42.63 count 10000 search IS input THIS IS a TEST
end IF TEST 2:12:27.97 count 10000 search IS input THIS IS a TEST
start FIND TEST 2:12:27.97 count 10000 search IS input THIS IS a TEST
end FIND TEST 2:15:04.46 count 10000 search IS input THIS IS a TEST
start FINDSTR TEST 2:15:04.46 count 10000 search IS input THIS IS a TEST
end FINDSTR TEST 2:17:32.97 count 10000 search IS input THIS IS a TEST
start IF TEST 2:17:32.97 count 10000 search IS input THIS IS a TEST with many characters 012345689[OUTPUT TRUNKATED HERE]012345689
end IF TEST 2:18:18.84 count 10000 search IS input THIS IS a TEST with many characters 012345689[OUTPUT TRUNKATED HERE]012345689
start FIND TEST 2:18:18.84 count 10000 search IS input THIS IS a TEST with many characters 012345689[OUTPUT TRUNKATED HERE]012345689
end FIND TEST 2:20:50.41 count 10000 search IS input THIS IS a TEST with many characters 012345689[OUTPUT TRUNKATED HERE]012345689
start FINDSTR TEST 2:20:50.41 count 10000 search IS input THIS IS a TEST with many characters 012345689[OUTPUT TRUNKATED HERE]012345689
end FINDSTR TEST 2:23:29.77 count 10000 search IS input THIS IS a TEST with many characters 012345689[OUTPUT TRUNKATED HERE]012345689