By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,185 Members | 1,271 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,185 IT Pros & Developers. It's quick & easy.

how to speed up collections iteration

P: n/a
I have the following code:
_transColl is a collection of classes and it contains about 42000 objects
My question is there any way I can make this code run faster?

I have found out that line 2 is realy expensive (time wise) :

'------------------------------------------------------------------

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
3 If ti.Key.Equals(key) Then
4 ti.TranslatedValue = val
5 End If
6 Next

'
' the following code is useless by it's very fast, proving that the line 2
is the culprint
' I've moved the line 2 out out the loop
'
ti = CType(Me._transColl(0), TranslateImport)

For n As Int32 = 1 To Me._transColl.Count - 1
If ti.Key.Equals(key) Then
ti.TranslatedValue = val
End If
Next
Thanks for any input?
Jul 27 '06 #1
Share this Question
Share on Google+
7 Replies


P: n/a
You might try Directcast instead of ctype
regards
Michel
"Peter" <pc*****@nospam.nospamschreef in bericht
news:%2***************@TK2MSFTNGP05.phx.gbl...
>I have the following code:
_transColl is a collection of classes and it contains about 42000 objects
My question is there any way I can make this code run faster?

I have found out that line 2 is realy expensive (time wise) :

'------------------------------------------------------------------

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
3 If ti.Key.Equals(key) Then
4 ti.TranslatedValue = val
5 End If
6 Next

'
' the following code is useless by it's very fast, proving that the line 2
is the culprint
' I've moved the line 2 out out the loop
'
ti = CType(Me._transColl(0), TranslateImport)

For n As Int32 = 1 To Me._transColl.Count - 1
If ti.Key.Equals(key) Then
ti.TranslatedValue = val
End If
Next
Thanks for any input?


Jul 27 '06 #2

P: n/a
I like to avoid indices every time it is possible (2005), code is
clearer imho:

For Each TranslateImport As TranslateImport In Me._transColl
with TranslateImport
If .Key = key Then .TranslatedValue = Val()
end with
Next TranslateImport

-tom

Michel Posseth [MCP] ha scritto:
You might try Directcast instead of ctype
regards
Michel
"Peter" <pc*****@nospam.nospamschreef in bericht
news:%2***************@TK2MSFTNGP05.phx.gbl...
I have the following code:
_transColl is a collection of classes and it contains about 42000 objects
My question is there any way I can make this code run faster?

I have found out that line 2 is realy expensive (time wise) :

'------------------------------------------------------------------

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
3 If ti.Key.Equals(key) Then
4 ti.TranslatedValue = val
5 End If
6 Next

'
' the following code is useless by it's very fast, proving that the line 2
is the culprint
' I've moved the line 2 out out the loop
'
ti = CType(Me._transColl(0), TranslateImport)

For n As Int32 = 1 To Me._transColl.Count - 1
If ti.Key.Equals(key) Then
ti.TranslatedValue = val
End If
Next
Thanks for any input?
Jul 27 '06 #3

P: n/a
try a typed collection (start from a generic (Of TranslateImport), to avoid
runtime cast...
"Peter" <pc*****@nospam.nospamwrote in message
news:%2***************@TK2MSFTNGP05.phx.gbl...
>I have the following code:
_transColl is a collection of classes and it contains about 42000 objects
My question is there any way I can make this code run faster?

I have found out that line 2 is realy expensive (time wise) :

'------------------------------------------------------------------

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
3 If ti.Key.Equals(key) Then
4 ti.TranslatedValue = val
5 End If
6 Next

'
' the following code is useless by it's very fast, proving that the line 2
is the culprint
' I've moved the line 2 out out the loop
'
ti = CType(Me._transColl(0), TranslateImport)

For n As Int32 = 1 To Me._transColl.Count - 1
If ti.Key.Equals(key) Then
ti.TranslatedValue = val
End If
Next
Thanks for any input?


Jul 27 '06 #4

P: n/a

"Trapulo" <tr*****@noemail.noemailwrote in message
news:%2****************@TK2MSFTNGP03.phx.gbl...
try a typed collection (start from a generic (Of TranslateImport), to
avoid runtime cast...
"Peter" <pc*****@nospam.nospamwrote in message
news:%2***************@TK2MSFTNGP05.phx.gbl...
>>I have the following code:
_transColl is a collection of classes and it contains about 42000 objects
My question is there any way I can make this code run faster?

I have found out that line 2 is realy expensive (time wise) :

'------------------------------------------------------------------

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
3 If ti.Key.Equals(key) Then
4 ti.TranslatedValue = val
5 End If
6 Next

'
' the following code is useless by it's very fast, proving that the line
2 is the culprint
' I've moved the line 2 out out the loop
'
ti = CType(Me._transColl(0), TranslateImport)

For n As Int32 = 1 To Me._transColl.Count - 1
If ti.Key.Equals(key) Then
ti.TranslatedValue = val
End If
Next
Thanks for any input?


Sorry I did not mention - I am running VS2003
Jul 27 '06 #5

P: n/a
>>I have the following code:
>>_transColl is a collection of classes and it contains about 42000
objects
My question is there any way I can make this code run faster?
I have found out that line 2 is realy expensive (time wise) :

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
Sorry I did not mention - I am running VS2003
You can try DirectCast over CType, but be sure the values in your collection
are only the type you are trying to cast to. This is one of the key advantages
of List(of T) over ArrayList(). I recommend Sahil Malik's comparison at http://codebetter.com/blogs/sahil.ma.../02/40506.aspx.

In general, I would question iterating over 42000 in your business layer
rather than directly on the database as you are likely suffering a greater
penalty with the memory footprint of that many objects, including the network
bandwidth of fetching them, than you are with the casting.

Jim Wooley
http://devauthority.com/blogs/jwooley/default.aspx
Jul 27 '06 #6

P: n/a

<to**************@uniroma1.itwrote in message
news:11*********************@m79g2000cwm.googlegro ups.com...
>I like to avoid indices every time it is possible (2005), code is
clearer imho:

For Each TranslateImport As TranslateImport In Me._transColl
with TranslateImport
If .Key = key Then .TranslatedValue = Val()
end with
Next TranslateImport

-tom

Michel Posseth [MCP] ha scritto:
>You might try Directcast instead of ctype
regards
Michel
"Peter" <pc*****@nospam.nospamschreef in bericht
news:%2***************@TK2MSFTNGP05.phx.gbl...
>I have the following code:
_transColl is a collection of classes and it contains about 42000
objects
My question is there any way I can make this code run faster?

I have found out that line 2 is realy expensive (time wise) :

'------------------------------------------------------------------

1 For n As Int32 = 1 To Me._transColl.Count - 1
2 ti = CType(Me._transColl(n), TranslateImport)
3 If ti.Key.Equals(key) Then
4 ti.TranslatedValue = val
5 End If
6 Next

'
' the following code is useless by it's very fast, proving that the
line 2
is the culprint
' I've moved the line 2 out out the loop
'
ti = CType(Me._transColl(0), TranslateImport)

For n As Int32 = 1 To Me._transColl.Count - 1
If ti.Key.Equals(key) Then
ti.TranslatedValue = val
End If
Next
Thanks for any input?

I have tried the fillowing in .NET 2.0 and it works realy fast, but in .NET
1.1 is slow the same as using for next loop.
Is there anything I can do to speed this up in .NET 1.1 ?
For Each TranslateImport As TranslateImport In Me._transColl
with TranslateImport
If .Key = key Then .TranslatedValue = Val()
end with
Next TranslateImport
Jul 28 '06 #7

P: n/a
Peter,
First I would question having 42000 objects in a collection.

| Is there anything I can do to speed this up in .NET 1.1 ?

What type of "collection" are you using? Array, ArrayList, VB.Collection, or
something else?

| For Each TranslateImport As TranslateImport In Me._transColl
| with TranslateImport
| If .Key = key Then .TranslatedValue = Val()
| end with
| Next TranslateImport
Is the .key property unique in the collection? Have you considered a
HashTable (.NET 1.x) or Dictionary(Of T) (.NET 2.0) instead. Where .Key is
the key to the HashTable/Dictionary.

Alternatively: Can you sort the collection by .Key, then use a BinarySearch?
..NET 2.0 has made improvements in the performance of large DataSets, does
using a DataSet instead of a class & a collection improve performance?

--
Hope this helps
Jay B. Harlow [MVP - Outlook]
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"Peter" <pc*****@nospam.nospamwrote in message
news:OO**************@TK2MSFTNGP02.phx.gbl...
|
| <to**************@uniroma1.itwrote in message
| news:11*********************@m79g2000cwm.googlegro ups.com...
| >I like to avoid indices every time it is possible (2005), code is
| clearer imho:
| >
| For Each TranslateImport As TranslateImport In Me._transColl
| with TranslateImport
| If .Key = key Then .TranslatedValue = Val()
| end with
| Next TranslateImport
| >
| -tom
| >
| Michel Posseth [MCP] ha scritto:
| >
| >You might try Directcast instead of ctype
| >>
| >>
| >regards
| >>
| >>
| >Michel
| >>
| >>
| >"Peter" <pc*****@nospam.nospamschreef in bericht
| >news:%2***************@TK2MSFTNGP05.phx.gbl...
| >I have the following code:
| _transColl is a collection of classes and it contains about 42000
| objects
| My question is there any way I can make this code run faster?
| >
| I have found out that line 2 is realy expensive (time wise) :
| >
| '------------------------------------------------------------------
| >
| 1 For n As Int32 = 1 To Me._transColl.Count - 1
| 2 ti = CType(Me._transColl(n), TranslateImport)
| 3 If ti.Key.Equals(key) Then
| 4 ti.TranslatedValue = val
| 5 End If
| 6 Next
| >
| '
| ' the following code is useless by it's very fast, proving that the
| line 2
| is the culprint
| ' I've moved the line 2 out out the loop
| '
| ti = CType(Me._transColl(0), TranslateImport)
| >
| For n As Int32 = 1 To Me._transColl.Count - 1
| If ti.Key.Equals(key) Then
| ti.TranslatedValue = val
| End If
| Next
| >
| >
| Thanks for any input?
| >
| >
| >
|
| I have tried the fillowing in .NET 2.0 and it works realy fast, but in
..NET
| 1.1 is slow the same as using for next loop.
| Is there anything I can do to speed this up in .NET 1.1 ?
|
|
| For Each TranslateImport As TranslateImport In Me._transColl
| with TranslateImport
| If .Key = key Then .TranslatedValue = Val()
| end with
| Next TranslateImport
|
|
Jul 28 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.