据我所知,字符串在 Delphi 中是不可变的。我有点理解这意味着如果你这样做:
string1 := 'Hello';
string1 := string1 + " World";
第一个字符串被销毁,您将获得对新字符串“Hello World”的引用。
但是,如果您在代码周围的不同位置有相同的字符串,会发生什么?
我分配了一个字符串哈希来标识多个变量,例如,“更改”由该更改的属性的哈希值标识。这样我就很容易检查“更改”是否相等。
现在,每个散列都是单独计算的(并非所有属性都被考虑在内,因此即使实例在某些值上不同,它们也可以相等)。
问题是,Delphi 如何处理这些字符串?如果我计算将散列分隔为相同的 10 字节长度字符串,我会得到什么?两个 10 字节的内存块还是对同一个内存块的两个引用?
澄清:更改由从数据库读取的一些属性组成,并由单个线程生成。TChange 类有一个 GetHash 方法,该方法根据字符串中的某些值(但不是全部)计算哈希值。现在,其他线程收到更改并且必须将其与先前处理的更改进行比较,以便它们不会处理相同的(逻辑)更改。因此散列,并且由于它们具有单独的实例,因此计算了两个不同的字符串。我正在尝试确定从字符串更改为 128 位哈希之类的东西是否是一个真正的改进,否则只会浪费我的时间。
编辑:Delphi 的版本是 Delphi 7.0