>>Perhaps each new row increases the array instead of increasing by a larger amount to create a buffer and pruning excess rows (once) at the end of the command duration - StringBuffer/Builder AFAIR increase 50% of previous buffer size, which could lead to memory trouble when increasing large arrays
Could well be. My explanation was that Copy TO ARRAY is an antique command dating back to times when we were blessed with 26 aliases and realistic memory limits measured in tens of MB. It had to be efficient with small resultsets since nobody would be so foolish as to mount huge memory-resident collections- at least not until NET and its memory-resident datasets
"... They ne'er cared for us
yet: suffer us to famish, and their store-houses
crammed with grain; make edicts for usury, to
support usurers; repeal daily any wholesome act
established against the rich, and provide more
piercing statutes daily, to chain up and restrain
the poor. If the wars eat us not up, they will; and
there's all the love they bear us."
-- Shakespeare: Coriolanus, Act 1, scene 1