私の知る限り、Delphi では文字列は不変です。あなたがそうするなら、私はそれが意味することをちょっと理解しています:
string1 := 'Hello';
string1 := string1 + " World";
最初の文字列が破棄され、新しい文字列 "Hello World" への参照が取得されます。
しかし、コード内の異なる場所に同じ文字列がある場合はどうなるでしょうか?
いくつかの変数を識別するために文字列ハッシュが割り当てられているため、たとえば、「変更」はその変更のプロパティのハッシュ値によって識別されます。そうすれば、平等の「変更」を簡単にチェックできます。
現在、各ハッシュは個別に計算されます (すべてのプロパティが考慮されるわけではないため、一部の値が異なっていてもインスタンスを分離することができます)。
問題は、Delphi がこれらの文字列をどのように処理するかです。ハッシュを同じ 10 バイト長の文字列に分離するために計算すると、何が得られますか? 10 バイトの 2 つのメモリ ブロックまたは同じメモリ ブロックへの 2 つの参照?
明確化:変更は、データベースから読み取られたいくつかのプロパティによって構成され、個々のスレッドによって生成されます。TChange クラスには、文字列の結果の一部の値 (すべてではない) に基づいてハッシュを計算する GetHash メソッドがあります。現在、他のスレッドは変更を受け取り、それを以前に処理された変更と比較して、同じ (論理的な) 変更を処理しないようにする必要があります。したがって、ハッシュと、それらには別個のインスタンスがあるため、2 つの異なる文字列が計算されます。文字列から 128 ビット ハッシュのようなものに変更することが実際の改善になるのか、それとも時間を無駄にするだけなのかを判断しようとしています。
編集:DelphiのバージョンはDelphi 7.0です