Насколько я знаю, строки в Delphi неизменны. Я вроде понимаю, что значит, если вы делаете:
string1 := 'Hello';
string1 := string1 + " World";
Первая строка уничтожена, и вы получаете ссылку на новую строку «Hello World».
Но что произойдет, если у вас в коде одна и та же строка в разных местах?
У меня есть строковый хеш, назначенный для идентификации нескольких переменных, поэтому, например, «изменение» идентифицируется хеш-значением свойств этого изменения. Таким образом, мне легко проверить «изменения» на равенство.
Теперь каждый хеш вычисляется отдельно (не все свойства учитываются, чтобы отдельные экземпляры могли быть равны, даже если они различаются по некоторым значениям).
Вопрос в том, как Delphi обрабатывает эти строки? Что я получу, если вычислить отдельные хэши для одной строки длиной 10 байт? Два блока памяти по 10 байт или две ссылки на один и тот же блок памяти?
Пояснение: Изменение состоит из некоторых свойств, считанных из базы данных, и генерируется отдельным потоком. Класс TChange имеет метод GetHash, который вычисляет хеш на основе некоторых значений (но не всех), полученных в виде строки. Теперь другие потоки получают изменения и должны сравнивать их с ранее обработанными изменениями, чтобы они не обрабатывали одно и то же (логическое) изменение. Следовательно, хеш и, поскольку они имеют отдельные экземпляры, вычисляются две разные строки. Я пытаюсь определить, будет ли реальным улучшением переход со строки на что-то вроде 128-битного хэша, или это будет просто напрасная трата времени.
Редактировать: Версия Delphi - Delphi 7.0