Присвойте ему пустую строку, присвойте ей значение nil или вызовите Finalize()
.Все они эквивалентны и освобождают хранилище, тем самым устраняя утечку памяти.
В ответ на комментарий Марко документация явно указана на этом:
Динамические переменные, которыми обычно управляет компилятор (длинные строки, широкие строки, динамические массивы, варианты и интерфейсы), могут быть объявлены с помощью threadvar, но компилятор не освобождает автоматически выделенную кучу память, созданную каждым потокомвыполнение.Если вы используете эти типы данных в переменных потока, вы обязаны распоряжаться их памятью внутри потока до его завершения.Например:
threadvar
S: AnsiString;
S := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
...
S := ; // free the memory used by S
Довольно странно, документация содержит явную ошибку в последней строке, которая должна выглядеть следующим образом: S := nil;
Конечно, легко увидеть, что потоклокальные переменные не располагаются автоматически:
program LeakMe;
{$APPTYPE CONSOLE}
threadvar
s: string;
begin
ReportMemoryLeaksOnShutdown := True;
s := 'Leak me';
end.