An interesting concept is how to store a dynamic array. The best dynamic array would optimally take the least amount of space, be the fastest array possible, and be as efficient as possible. I quickly did an investigation in 2003 into the speed of creating dynamic arrays a different number of ways, all in Visual Basic 6.
My results for inserting 25000 new strings into arrays were as follows:
- Fixed size array: 0.148 sec
- Stepped dynamic array: 0.164 sec
- Collection: 0.234 sec
- Incremental dynamic array: 1.664 sec
An “incremental” dynamic array was one which is redimensioned every new item, and a “stepped” dynamic array is one whose size doubles when it’s appropriate. Experience tells that the stepped version is significantly faster than the incremental version; in practice, it may be better to only increase the array size by 10-30% every step, to reduce memory use.
I did not use any wild optimisations, and did not take into account other factors like the actual memory size used. It’s interesting to see that using a Collection, a really flexible array type that can store Objects and Classes, is quite fast (not as fast as the array methods of course, but that’s to be expected).
The code I used for each benchmark is provided below.
Function BenchmarkArray(n) Dim b() ReDim b(0 To n) For i = 0 To UBound(b) b(i) = "some string" Next End Function Function BenchmarkCollection(n) Dim c As Collection Set c = New Collection For i = 0 To n c.Add "some string" Next End Function Function BenchmarkDynamic(n) Dim b() ReDim b(0) For i = 0 To n ReDim Preserve b(i) b(i) = "some string" Next End Function Function BenchmarkDynamic2(n) Dim b() ReDim b(0) For i = 0 To n If i > UBound(b) Then ReDim Preserve b(UBound(b) * 2 + 1) End If b(i) = "some string" Next End Function