41.000 * 16 Record-Bytes = 656.000 Byte (TList legt das in einem Block in den
RAM ... bei 64 KB-Speicherblöcken macht das 10,0098 Blöcke = aufgerundet 11*64 = 720.896 Bytes)
+
41.000 * (4 Längen-Bytes + 2 CharSize-Bytes + 2 CodepageBytes + 2*2 abschließende #0-Bytes + 5*2
Unicode-Bytes) = 22 ... FastMM wird das vermutlich im 32er-Block ablegen = 1.312.000 Bytes
effektiv also 2 MB (in Delphi ab Version 2009)
und dazu kommt dann noch die
VCL, usw.
aber jetzt kommt es noch darauf an, was du eigentlich soonst noch machst, vorallem mit den Strings,
wie du die Liste befüllst (mit oder einer passenden Capacity)
und wie
die deine Speicherverwaltung aussieht,
was du für eine Delphiversion benutzt uvm.
Wenn das wirklich so viel wird dann liegt das vermutlich an dir und eventuell einer wunderschönen Speicherfragmentierung.
Was sagt denn z.B. GetHeapStatus, GetMemoryManagerState, wieviel es wirklich ist?
Und wie sieht es mit Speicherlecks aus? (ReportMemoryLeaksOnShutdown)
[edit] Deine code hab ich mir jetzt nicht angesehn (ist auch schon spät)