Wo werden Unmengen an Speicher angefordert? Die Liste wächst, weil die Kapazität initial nicht gesetzt wird (23 mal in dem Beispiel). Das macht den Kohl aber nu auch nicht fett (einfach mal testen).
Aber falls Du mit 'Unmengen' die 23 meinst, dann hilft sowas:
Delphi-Quellcode:
ResultList.Capacity := OriginalList.Count;
//
// die Schleife
//
OriginalList.Count := OriginalList.Count - extracted;
ResultList.Capacity := extracted;
So ist das jedenfalls auch nicht mehr messbar (O(n) vs. O(n*m) bringt schon viel).