I'm very sorry to say that, amac, but that's just plain wrong. Simple as that.

A vector's memory strategy is different. It's implementation-specific, but no implementation grows just by one every time something is added.
MS's implementation grows by 50%, SGI's doubles its size.
And the .Net collections need to grow too.

The string reallocations don't count, the .Net framework reallocates too, and allocation on a managed heap takes longer than on the normal heap.

So it would make sense to specify an initial size, but it won't speed up the thing very much. Neither will a linked list do.

StringArray Results(20);