[Mono-dev] List<T> Optimisations

Alan McGovern alan.mcgovern at gmail.com
Mon Mar 26 12:03:26 EDT 2007


I was just browsing through the List<T> implementation and made a few speed
optimisations. I'm not sure if changing from foreach(blah) to for(int i=0;
i< blah, i++) is ok or not, but it does offer a large speed increase. So let
me know if that's ok or not.

Optimised Methods:
RemoveAll - from 0x up to 50x faster

(The reason for the huge speed increase is that if you have a list<int>
containing entirely the number 5, removing from the end will be much more
efficient than removing from the start as you won't have to shift the entire
array over and over. Removing from the end will *always* be faster than
removing from the start, but the exact speed increase is highly dependant on
the number of matches).

Add - 0.3x faster

ConvertAll - 0.5x faster

Exists - 0.04x faster

Find - 0.05x faster

ForEach - 2.7x faster

InsertAt - up to 0.2x faster (if addind at the end)

RemoveAll - 0.11x faster

True For All - 2.3x faster

Patch attached. Let me know if it's good to commit. It still passes the
NUnit tests.

Alan.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20070326/f4caab2e/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ListT.patch
Type: text/x-patch
Size: 4058 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20070326/f4caab2e/attachment.bin 


More information about the Mono-devel-list mailing list