As I wrote in a previous post, Delphi string, dynamic array and memory manager don't like multi-core CPU.
My proposal is to add a threadlocalvar keyword, to be used instead of var in your code, to mark some variables to be used in only the current thread. Then the compiler and RTL won't have to use the LOCK instruction, and the application will be MUCH faster in multi-thread environment.