Ich hab es nur mal kurz überflogen.
Es wäre hilfreich aussagekräftige Variablennamen zu verwenden (nicht Memo1 etc.)
Bezüglich Speicher ist mit der bereits erwähte Verdacht unter gekommen:
Delphi-Quellcode:
for i := 1 To Folder.Items.Count do
begin
[...]
SetLength(licenseSet1, Length(licenseSet1)+1);
Du vergrößerst das dynamische Array immer wieder um 1 was den gleichen Effekt hat wie bei den Strings.
Setz die länge zu Begin auf die maximal mögliche Größe von "Folder.Items.Count" und wenn die schleife durchgelaufen ist kannst du es auf die tatsächlich benötigte Größe zurück verkleinern.
Du solltest den ganzen Quelltext diesbezüglich etwas überdenken/überarbeiten