Auf die 40.000 komme ich, weil Du geschrieben hast, dass Du 1. bis zu 20.000 Elemente hast und 2. Deine Listenelemente von einer Klasse sind, die beim "New" zwei Dokumente als Parameter übergeben bekommen. 2 x 20.000 = 40.000 (so meine vielleicht etwas naive Rechenmethode).
Wenn ich massenhaft Daten von Dokumenten im Speicher halten muss (ich mache das auch mit Listen, ist mein Lieblingskonstrukt in Script), nehme ich Dokumente nur, wenn es nicht anders geht. Meist beschränkt sich das ganze ja auf ein paar Felder pro Dokument. Dann deklariere ich einen eigenen Datentyp
Type meinDatentyp
Datum1 As ...
Datum2 As ...
Datum3 As ...
End Type
und definiere darüber die Liste
Dim meineListe List As MeinDatentyp
Der Zugriff erfolgt dann genauso, als wenn es ein Dokument wäre (evtl. ohne (0), wenn die einzelnen Daten z.B. als String deklariert sind).
rein:
meineListe ("Test").Datum1 = "1"
meineListe ("Test").Datum2 = "2"
meineListe ("Test").Datum3 = "3"
raus:
return = meineListe ("Test").Datum1
Im Ergebnis habe ich die gleichen Daten im Speicher, muss beim Schreiben in den Speicher zwar etwas mehr tun als nur Set meineDokumente ("Test") = doc, verbrauche aber wesentlich weniger Platz. Ist vielleicht nicht wirklich die Ursache Deines Problems, es kann aber nie schaden, auch mit den scheinbar unendlich vorhandenen Ressourcen heutiger Rechner etwas sparsamer umzugehen.
Gespannt bin ich auf das Ergebnis Deines Versuches mit FullTrimFix ...