Delphi字符串共享问题

时间:2011-08-26 07:13:57

标签: string delphi memory-management delphi-xe

我有大量的对象都存有文件名。所有文件名都在给定的基目录中(我们称之为C:\BaseDir\)。我现在正在考虑两种选择:

  1. 在对象中存储绝对路径
  2. 在对象中存储相对路径并另外存储基本路径
  3. 如果我正确理解Delphi字符串,第二种方法将需要更少的内存,因为基本路径字符串是共享的 - 假设我将相同的字符串字段传递给所有对象,如下所示:

    TDataObject.Create (FBasePath, RelFileName);
    

    这个假设是真的吗?内存中只有一个基本路径的字符串实例吗?

    如果有人知道处理这种情况的更好方法,也可以随意评论。

    谢谢!

2 个答案:

答案 0 :(得分:6)

你是对的。当你用两个字符串变量写s1:= s2时,内存中有一个字符串(至少有两个)引用它。

您还要问是否尝试减少内存中的字符串数量是一个好主意。这取决于与其他内存消耗对象相比有多少字符串。只有你能真正回答这个问题。

答案 1 :(得分:2)

正如David所说,共享字符串将被共享(除非你使用ie UniqueString())。

话虽如此,看起来过早的优化。如果你真的需要使用完整路径并且永远不需要单独的dir和文件名部分,那么你应该考虑在你真正遇到内存问题时将它们分开。 不断连接基本部分和文件名部分可能会大大减慢程序速度并导致内存碎片化。