Delphi uses reference counting for long strings. The following code:
str := 'Ralph the Wonder Llama';
str1 := str;
str2 := str;
str3 := str;
will result in only one memory copy of 'Ralph the Wonder Llama'. All four strings will point to that memory and the string will have a reference count of 4. If you attempt to change one of the copies, for example str3 := str3 + 's'; It will make a copy of the string, add the S to it, and decrement the previous string's reference count to 3. Str3 is now it's own copy of the string.
Keeping the above in mind, I don't think you need to blank out the strings because if you had other references to those strings it would add the overhead of making a new string rather than just reducing the reference count to the string or freeing it outright.
Delphi string handling will free the strings when there are no more references. Freeing your stringlist includes the same steps as calling clear, so it is redundant.
As far as Stringlist restrictions, I think that's a memory thing - you might see performance degradation if you're doing searches but otherwise you're limited to how much memory you have available.
TealWren