2011-08-26 92 views
4

我有一大堆对象都有一个文件名存储在里面。所有文件名都在给定的基本目录内(我们称之为C:\BaseDir\)。我现在考虑两种选择:德尔福字符串共享问题

  1. 店绝对路径中的对象
  2. 存储相对路径的对象和存储的基本路径还

如果我理解德尔福字符串正确第二种方法将需要更少的内存,因为基本路径字符串共享 - 因为我相同的字符串场传递给这样所有对象:

TDataObject.Create (FBasePath, RelFileName); 

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

如果有人知道更好的方式来处理这种情况,请随时评论。

谢谢!

回答

6

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

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

2

正如大卫所说,共同的字符串将被共享(除非你使用ie,即UniqueString())。

话虽如此,它看起来像不成熟的优化。如果你实际上需要使用完整路径并且不需要分别指定目录和文件名部分,那么只有当你遇到内存问题时才应该考虑将其分开。 不断连接基本和文件名部分可能会显着减慢程序并导致内存碎片。

+0

不成熟的优化,同意。但是,保持基路径与相关基路径分离的设计原因可能存在 - 例如,在全局范围内更容易更改基路径,同时保持所有相同的相对路径与当前基路径可能相同。但是在这种情况下,他可能最好将基本路径保持为单独的全局字符串变量,并在每个文件访问之前将对象中的相对路径连接起来。 –