Das ist doch Käse. Erzeuge die Listen ini, Sektionen & Co einmalig vor der Schleife und leere sie, sofern nötig, mit TStringList.Clear innerhalb der for-Schleife.
Muss er nicht. Jeder Aufruf von ReadSections und ReadSection löscht die vorherige, also die alte Liste.
Jeder Aufruf von ReadSection(s) leert die Liste, ja. Damit spart man sich das Clear (deswegen schrieb ich ja "sofern nötig"). Dennoch ist das wiederholte Erzeugen der Listen innerhalb der Schleife unnötig und verursacht Speicherlecks, zumal es überhaupt kein zugehöriges sl.Free gibt.
MfG Dalai