Hallo,
I have promised Jay B yesterday to do some tests.
The subject was a string evaluation that Jon had send in. Jay B was in doubt
what was better because there was a discussion in the C# newsgroup on 25
September. The regular expressions where in that newsgroup too involved.
I told yesterday night, to Jay that I would test all 4 methods and the
stupid method I was thinking of the first time that night when I saw Jon's
code. Herfried said from that, that it would become slow with a string from
10Mb. So I told Herfried that I would make the test program if he would type
in a real mixed string for me. But till now he did not send that. (Or maybe
he has again problems with the newsgroup server)
To Jay B I told also that I would try to test extra the difference between
the Microsoft.visua l basic function Instr and the system function indexof.
The methods I tested were:
- a do until method with index of (Jay B)
- a do method with Instr (Jon)
- the same I changed something to indexof (Jon)
Those works all with strings
The others only with characters as a search item
- a stupid method that only needs 2 lines code what became in my thoughts
yesterday night
- a indexof with a char (Jay B)
- a for each with a char (Jay B)
I made a test program that I send with this message beneath.
Because all is dependable on the computer you use, I don't give absolute
figures if you wish you can try it yourself. On my computer it is impossible
to see with any method a difference from more than 1/1000 of a second with a
string shorter than 5000 characters.
With more than that amount of characters that the stupid method I thought of
yesterday becomes visible slower.
When it are real long strings, than with a charsearch was in my test the
fastest method the "do for loop" with "indexof" and second was the for "each
char" both from Jay B.
But for me the most surprising was that the Microsoft.visua lbasic function
with "Instr" from Jon was almost 2 times faster with a 3 character string
than the net.system method "indexoff".
I do the test program beneath; it is made with a windowsform project, and
need 2 textboxes from which textbox1 needs to have multi line true, a
button1 and a large label1.
Texbox1 is for the text to make a string with (automaticly made till
Herfried send his in).
Textbox2 the length of the text string to make (Yes you understand it
till....)
I hope this gives some idea's (too about some people who said the
microsoft.visua lbasic functions are slow and outdated, This you can of
course not test with C#.)
Cor
\\\
Private Sub Button1_Click(B yVal sender _
As Object, ByVal e As System.EventArg s) Handles Button1.Click
If Me.TextBox1.Tex t = "" Then
Me.label1.Text = "Enter strings in uper textbox"
Exit Sub
End If
If Not IsNumeric(Me.Te xtBox2.Text) Then
Me.label1.Text = "Enter value in down textbox"
Exit Sub
End If
TestString.Buil d(Me.TextBox1.T ext.ToString, CInt(Me.TextBox 2.Text))
Dim delimiter As String
If TestString.Stri ngToTest.Length > 3 Then
delimiter = TestString.Stri ngToTest.Substr ing(0, 3)
Else
Exit Sub
End If
Dim i As Integer
Dim labeltext As New System.Text.Str ingBuilder
Dim count As Integer
Dim testname As String
For i = 1 To 3
Dim StartTick As Integer = Environment.Tic kCount
Select Case i
Case 1
testname = "Jay B, string "
count = Test1(TestStrin g.StringToTest, delimiter)
Case 2
testname = "Jon, string "
count = Test2(TestStrin g.StringToTest, delimiter)
Case 3
testname = "Jon, but with indexof"
count = Test3(TestStrin g.StringToTest, delimiter)
End Select
Dim Elapsed As Integer = Environment.Tic kCount - StartTick
labeltext.Appen d(testname & "count: " & _
count & " Elapsed : " & Elapsed.ToStrin g & vbCrLf)
Next
delimiter = delimiter.Subst ring(0, 1)
labeltext.Appen d("characters " & vbCrLf)
For i = 1 To 6
Dim StartTick As Integer = Environment.Tic kCount
Select Case i
Case 1
testname = "Jay B, string "
count = Test1(TestStrin g.StringToTest, delimiter)
Case 2
testname = "Jon, string "
count = Test2(TestStrin g.StringToTest, delimiter)
Case 3
testname = "Jon, but with indexof "
count = Test3(TestStrin g.StringToTest, delimiter)
Case 4
If TestString.Stri ngToTest.Length < 599999 Then
testname = "Cor stupid "
count = Test4(TestStrin g.StringToTest, delimiter)
Else
testname = "Skipped test"
End If
Case 5
testname = "Jay B char do until "
count = test5(TestStrin g.StringToTest, delimiter)
Case 6
testname = "Jay B char for each "
count = test6(TestStrin g.StringToTest, delimiter)
End Select
Dim Elapsed As Integer = Environment.Tic kCount - StartTick
labeltext.Appen d(testname & "count: " & _
count & " Elapsed : " & Elapsed.ToStrin g & vbCrLf)
Next
Me.label1.Text = labeltext.ToStr ing
End Sub
Private Sub Form1_Load(ByVa l sender As Object, ByVal _
e As System.EventArg s) Handles MyBase.Load
Me.Button1.Text = "start test"
End Sub
Public Function Test1(ByVal input As String, ByVal delimiter _
As String) As Integer 'Jay B 1(string)
Dim count, index As Integer
index = input.IndexOf(d elimiter)
Do Until index < 0
count += 1
index = input.IndexOf(d elimiter, index + 1)
Loop
Return count
End Function
Public Function Test2(ByVal strInput As String, ByVal strDelimiter _
As String) As Int32 'Jon (string)
Dim iStart As Int32, iCount As Int32, iResult As Int32
iStart = 1
iCount = 0
Do
iResult = InStr(iStart, strInput, strDelimiter)
If iResult = 0 Then Exit Do
iCount += 1
iStart = iResult + 1
Loop
Return iCount
End Function
Public Function Test3(ByVal input As String, ByVal delimiter _
As String) As Integer 'Jon with indexof(x,x,x)
Dim iStart As Int32, iCount As Int32, iResult As Int32
iStart = 0
iCount = 0
Do
iResult = input.IndexOf(d elimiter, iStart)
If iResult = -1 Then Exit Do
iCount += 1
iStart = iResult + 1
Loop
Return iCount
End Function
Public Function Test4(ByVal input As String, ByVal delimiter _
As String) As Integer 'Cor stupid
Dim teststring As String() = Split(input, delimiter)
Return teststring.Leng th - 1
End Function
Public Function test5(ByVal input As String, ByVal _
delimiter As Char) As Integer 'Jay 1(char)
Dim count, index As Integer
index = input.IndexOf(d elimiter)
Do Until index < 0
count += 1
index = input.IndexOf(d elimiter, index + 1)
Loop
Return count
End Function
Public Shared Function test6(ByVal input As String, _
ByVal delimiter As Char) As Integer 'JayB 2(char)
Dim count As Integer
For Each ch As Char In input
If ch = delimiter Then
count += 1
End If
Next ch
Return count
End Function
End Class
Public Class TestString
Private Shared mStringTest As String
Public Shared ReadOnly Property StringToTest() As String
Get
Return mStringTest
End Get
End Property
Public Shared Sub Build(ByVal strToTest As String, ByVal x As Integer)
Dim strTest As New System.Text.Str ingBuilder
Dim strTextbox As String() = Split(strToTest , vbCrLf)
Do While strTest.ToStrin g.Length < x
Dim i As Integer
For i = 0 To strTextbox.Leng th - 1
Dim y As Integer
For y = 0 To i
If strTest.ToStrin g.Length < x / 2 Then
strTest.Append( strTest.ToStrin g & strTextbox(i))
Else
strTest.Append( strTest.ToStrin g.Substring(0, x / 2) _
& strTextbox(i))
End If
Next
Next
Loop
mStringTest = strTest.ToStrin g.Substring(0, x)
End Sub
End Class
/// 35 2553
Hi Cor,
|| Herfried said from that, that it would become slow
|| with a string from 10Mb. So I told Herfried that I
|| would make the test program if he would type in a
|| real mixed string for me. But till now he did not send
|| that. (Or maybe he has again problems with the
|| newsgroup server)
I've just been speaking to Herfried at the Hospital - it's not looking
good. He got as far as character 432764 before the pain was too much to bear.
The doctors have diagnosed the most severe case of RSI that they have seen in
years. Not surprising when Herfried was typing as fast as he couldto get you
the file in time. Unfortunately amputation may be the most reasonable outcome.
:-((
Regards,
Fergus
"Fergus Cooney" <fi******@tesco .net> scripsit: Herfried said from that, that it would become slow with a string from 10Mb. So I told Herfried that I
I told that it will consume a lot of memory, but I never told that the
performance will be bad.
I've just been speaking to Herfried at the Hospital - it's not looking good. He got as far as character 432764 before the pain was too much to bear. The doctors have diagnosed the most severe case of RSI that
What's RSI?
they have seen in years. Not surprising when Herfried was typing as fast as he couldto get you the file in time. Unfortunately amputation may be the most reasonable outcome. :-((
:-(
--
Herfried K. Wagner
MVP · VB Classic, VB.NET
<http://www.mvps.org/dotnet>
Hi Herfried,
Repetitive Strain Injury - what you get from typing too much for too long.
How's the wrist now - do the doctors still think the hand will have to come
off? ;-)
Regards,
Fergus
Cor Because all is dependable on the computer you use, I don't give absolute figures if you wish you can try it yourself. On my computer it is
impossible to see with any method a difference from more than 1/1000 of a second with
a string shorter than 5000 characters.
When timing really fast functions like this, what you can do is put the
function in a loop, and call the function 1000 times, as long as you call
all the functions 1000 times you are safe to compare the amount of time they
took. You can increase the # of times you loop depending on how quick the
function. The danger becomes you start timing the loop itself and lose the
fact you are timing a function.
Jon Skeet a C# MVP wrote up the following on benchmarking, the samples are
in C# however the concepts should apply to VB.NET benchmarks. http://www.yoda.arachsys.com/csharp/benchmark.html
BTW: Thank you for the code!
Hope this helps
Jay
"Cor" <no*@non.com> wrote in message
news:3f******** **************@ reader20.wxs.nl ... Hallo,
I have promised Jay B yesterday to do some tests.
The subject was a string evaluation that Jon had send in. Jay B was in
doubt what was better because there was a discussion in the C# newsgroup on 25 September. The regular expressions where in that newsgroup too involved.
I told yesterday night, to Jay that I would test all 4 methods and the stupid method I was thinking of the first time that night when I saw Jon's code. Herfried said from that, that it would become slow with a string
from 10Mb. So I told Herfried that I would make the test program if he would
type in a real mixed string for me. But till now he did not send that. (Or
maybe he has again problems with the newsgroup server)
To Jay B I told also that I would try to test extra the difference between the Microsoft.visua l basic function Instr and the system function indexof.
The methods I tested were: - a do until method with index of (Jay B) - a do method with Instr (Jon) - the same I changed something to indexof (Jon) Those works all with strings The others only with characters as a search item - a stupid method that only needs 2 lines code what became in my thoughts yesterday night - a indexof with a char (Jay B) - a for each with a char (Jay B) I made a test program that I send with this message beneath. Because all is dependable on the computer you use, I don't give absolute figures if you wish you can try it yourself. On my computer it is
impossible to see with any method a difference from more than 1/1000 of a second with
a string shorter than 5000 characters. With more than that amount of characters that the stupid method I thought
of yesterday becomes visible slower.
When it are real long strings, than with a charsearch was in my test the fastest method the "do for loop" with "indexof" and second was the for
"each char" both from Jay B.
But for me the most surprising was that the Microsoft.visua lbasic
function with "Instr" from Jon was almost 2 times faster with a 3 character string than the net.system method "indexoff".
I do the test program beneath; it is made with a windowsform project, and need 2 textboxes from which textbox1 needs to have multi line true, a button1 and a large label1.
Texbox1 is for the text to make a string with (automaticly made till Herfried send his in). Textbox2 the length of the text string to make (Yes you understand it till....)
I hope this gives some idea's (too about some people who said the microsoft.visua lbasic functions are slow and outdated, This you can of course not test with C#.) Cor \\\ Private Sub Button1_Click(B yVal sender _ As Object, ByVal e As System.EventArg s) Handles Button1.Click If Me.TextBox1.Tex t = "" Then Me.label1.Text = "Enter strings in uper textbox" Exit Sub End If If Not IsNumeric(Me.Te xtBox2.Text) Then Me.label1.Text = "Enter value in down textbox" Exit Sub End If TestString.Buil d(Me.TextBox1.T ext.ToString, CInt(Me.TextBox 2.Text)) Dim delimiter As String If TestString.Stri ngToTest.Length > 3 Then delimiter = TestString.Stri ngToTest.Substr ing(0, 3) Else Exit Sub End If Dim i As Integer Dim labeltext As New System.Text.Str ingBuilder Dim count As Integer Dim testname As String For i = 1 To 3 Dim StartTick As Integer = Environment.Tic kCount Select Case i Case 1 testname = "Jay B, string " count = Test1(TestStrin g.StringToTest, delimiter) Case 2 testname = "Jon, string " count = Test2(TestStrin g.StringToTest, delimiter) Case 3 testname = "Jon, but with indexof" count = Test3(TestStrin g.StringToTest, delimiter) End Select Dim Elapsed As Integer = Environment.Tic kCount - StartTick labeltext.Appen d(testname & "count: " & _ count & " Elapsed : " & Elapsed.ToStrin g & vbCrLf) Next delimiter = delimiter.Subst ring(0, 1) labeltext.Appen d("characters " & vbCrLf) For i = 1 To 6 Dim StartTick As Integer = Environment.Tic kCount Select Case i Case 1 testname = "Jay B, string " count = Test1(TestStrin g.StringToTest, delimiter) Case 2 testname = "Jon, string " count = Test2(TestStrin g.StringToTest, delimiter) Case 3 testname = "Jon, but with indexof " count = Test3(TestStrin g.StringToTest, delimiter) Case 4 If TestString.Stri ngToTest.Length < 599999 Then testname = "Cor stupid " count = Test4(TestStrin g.StringToTest, delimiter) Else testname = "Skipped test" End If Case 5 testname = "Jay B char do until " count = test5(TestStrin g.StringToTest, delimiter) Case 6 testname = "Jay B char for each " count = test6(TestStrin g.StringToTest, delimiter) End Select Dim Elapsed As Integer = Environment.Tic kCount - StartTick labeltext.Appen d(testname & "count: " & _ count & " Elapsed : " & Elapsed.ToStrin g & vbCrLf) Next Me.label1.Text = labeltext.ToStr ing
End Sub Private Sub Form1_Load(ByVa l sender As Object, ByVal _ e As System.EventArg s) Handles MyBase.Load Me.Button1.Text = "start test" End Sub Public Function Test1(ByVal input As String, ByVal delimiter _ As String) As Integer 'Jay B 1(string) Dim count, index As Integer index = input.IndexOf(d elimiter) Do Until index < 0 count += 1 index = input.IndexOf(d elimiter, index + 1) Loop Return count End Function Public Function Test2(ByVal strInput As String, ByVal strDelimiter _ As String) As Int32 'Jon (string) Dim iStart As Int32, iCount As Int32, iResult As Int32 iStart = 1 iCount = 0 Do iResult = InStr(iStart, strInput, strDelimiter) If iResult = 0 Then Exit Do iCount += 1 iStart = iResult + 1 Loop Return iCount End Function Public Function Test3(ByVal input As String, ByVal delimiter _ As String) As Integer 'Jon with indexof(x,x,x) Dim iStart As Int32, iCount As Int32, iResult As Int32 iStart = 0 iCount = 0 Do iResult = input.IndexOf(d elimiter, iStart) If iResult = -1 Then Exit Do iCount += 1 iStart = iResult + 1 Loop Return iCount End Function Public Function Test4(ByVal input As String, ByVal delimiter _ As String) As Integer 'Cor stupid Dim teststring As String() = Split(input, delimiter) Return teststring.Leng th - 1 End Function Public Function test5(ByVal input As String, ByVal _ delimiter As Char) As Integer 'Jay 1(char) Dim count, index As Integer index = input.IndexOf(d elimiter) Do Until index < 0 count += 1 index = input.IndexOf(d elimiter, index + 1) Loop Return count End Function Public Shared Function test6(ByVal input As String, _ ByVal delimiter As Char) As Integer 'JayB 2(char) Dim count As Integer For Each ch As Char In input If ch = delimiter Then count += 1 End If Next ch Return count End Function End Class Public Class TestString Private Shared mStringTest As String Public Shared ReadOnly Property StringToTest() As String Get Return mStringTest End Get End Property Public Shared Sub Build(ByVal strToTest As String, ByVal x As Integer) Dim strTest As New System.Text.Str ingBuilder Dim strTextbox As String() = Split(strToTest , vbCrLf) Do While strTest.ToStrin g.Length < x Dim i As Integer For i = 0 To strTextbox.Leng th - 1 Dim y As Integer For y = 0 To i If strTest.ToStrin g.Length < x / 2 Then strTest.Append( strTest.ToStrin g & strTextbox(i)) Else strTest.Append( strTest.ToStrin g.Substring(0, x / 2) _ & strTextbox(i)) End If
Next Next Loop mStringTest = strTest.ToStrin g.Substring(0, x) End Sub End Class ///
Jay,
Thanks for the tip, but I am not intrested in differences between functions
who take less than 1/1000 of a second, if you are, we can try it.
Cor When timing really fast functions like this, what you can do is put the function in a loop, and call the function 1000 times, as long as you call all the functions 1000 times you are safe to compare the amount of time
theytook. You can increase the # of times you loop depending on how quick the function. The danger becomes you start timing the loop itself and lose the fact you are timing a function.
Herfried,
I am very sorry, I did not know that it would take such an amount of effort
for you to make that string.
Don't botter, I think that string of 422764 characters is as well as 10Mb,
other wise I just can do:
stringA = StringA + StringA + StringA and then it has enough characters to
do the test.
But lets not talk about those not so important things, more important is
your health.
I am worried about your hamster too, is somebode feeding it?
I hope the RSI is soon over.
Good luck
Cor
Good morning Cor. :-)
ROFL.
Regards,
Fergus
"Cor" <no*@non.com> scripsit: I am very sorry, I did not know that it would take such an amount of effort for you to make that string.
:-)
Don't botter, I think that string of 422764 characters is as well as 10Mb, other wise I just can do: stringA = StringA + StringA + StringA and then it has enough characters to do the test.
Use "&" to concatenate a string. You you want it to be faster, use a 'StringBuilder' .
But lets not talk about those not so important things, more important is your health. I am worried about your hamster too, is somebode feeding it?
I feeded it in the morning.
I hope the RSI is soon over.
;-)
--
Herfried K. Wagner
MVP · VB Classic, VB.NET
<http://www.mvps.org/dotnet>
"Fergus Cooney" <fi******@tesco .net> scripsit: Repetitive Strain Injury - what you get from typing too much for too long. How's the wrist now - do the doctors still think the hand will have to come off? ;-)
ROFLM*O
--
Herfried K. Wagner
MVP · VB Classic, VB.NET
<http://www.mvps.org/dotnet> This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Mark Carter |
last post by:
In v0.2.0
starting boa.py produces the error message:
File "C:\Python23\Lib\site-packages\wxPython\tools\boa\About.py",
line 301, in write
ss = string.strip(s)
NameError: global name 'string' is not defined
It appears that string is not imported in many modules, because fixing
this gives the further error:
|
by: Roberto Dias |
last post by:
Hi all,
What to do for searching for more than one string occurrence in the
same string (this last are line of a text). I have used getline(), to
get the text lines by means of WHILE loop and find(), to searching.
When find() finds a first occurrence it scape and don't detect
possible other one in the same string.
Here is a fragment:
...
|
by: Crimarc |
last post by:
I come back to ask qustion what did he promised you that you soudned
so much happy and sometime later so painful like you heart broken
becase of his dificults ???? What did you sacrifice for C++ things,
means how much effort you spend for c++ so far to becaome takable like
a professional ?
I know C++ overloading functions always hardest to...
|
by: Kishor |
last post by:
Hi Friends
Click here : www.c4swimmers.esmartguy.com to Test Your C Programming
Strengths.
You can find Tricky Questions on C, Interview type queries on C,
Infrequently Answered Questions in C and many more...
Thank You
Regards
|
by: Pokerkook |
last post by:
Hello,
If anybody could help me with this I would greatly appreciate it. Or at least
tell me why I get the output of this garbage:
49
49
10
49
52
| |
by: HopfZ |
last post by:
I coudn't understand some behavior of RegExp.test function.
Example html code:
----------------
<html><head></head><body><script type="text/javascript">
var r = /^https?:\/\//g;
document.write( );
</script></body></html>
---------------------
|
by: Petyr David |
last post by:
Just looking for the simplest. right now my perl script returns an
error messge to the user if the date string is invalid. would like to
do this before accessing the server.
TX
|
by: Umesh |
last post by:
Do you have any answer to it? thx.
|
by: yogi_bear_79 |
last post by:
I'm sure I have a few things wrong here. But I am stuck on how to do
a recurring search. Also my statement cin >quote; acts weird. If I
enter more than one word it blows right past cin >findMe; and
completes and exits the code. If you string for cin >quote; is one
word it behaves correctly or at least in that regard!
#include...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
| |
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...
| |