Я работаю с командой над большим приложением с Delphi 2007. Оно использует более крупную унаследованную среду для доступа к данным. И приложение, и фреймворк используют String в качестве типа данных для строк. Я начал изменять код в среде для поддержки строк Delphi 2009, см. Мои предыдущие вопросы по этому поводу.
Сейчас я вижу 2 варианта:
Alt 1 - Продолжать использовать строку, как и раньше. Это, вероятно, самое чистое решение, так как фреймворк будет поддерживать Unicode. Но код в фреймворке должен быть сильно изменен, чтобы это работало. Это требует глубокого понимания внутренних алгоритмов в фреймворке. Это также больше шансов представить новые ошибки.
Alt 2 - Заменить String на AnsiString, а Char на AnsiChar. Вероятно, это гораздо более простое решение, а также то, как я начинаю изменять код (но затем я начинаю думать и задавать этот вопрос ...). Отрицательной стороной этого является отсутствие поддержки Unicode. Поддержка Unicode не обязательна, поскольку работала раньше, но приятно иметь ее. Это также может быть полезно в будущем. Другая проблема заключается в том, что приложение должно отправлять переменные Ansistring в качестве параметров в методах для структуры вместо String, как и раньше. Есть тысячи звонков для изменения ...
Так что я не знаю сейчас. Оба варианта требуют много работы, но Alt 1, вероятно, более рискованно и требует много времени. От этого форума мне нужны отзывы и комментарии, так как я думаю, что я не первый, у кого возникла эта проблема.
EDIT
Другая проблема - след памяти. Я написал быстрый тест, который выделил массив из миллиона строк. Каждая строка была заполнена 26 символами от А до Я.
В Delphi 2007 это заняло 40.011.600 байт, а время составило 4:15 минут.
В Delphi 2009 это заняло 72.015.580 байт, а время составило 4:45 минут.
Потребление памяти измерялось с помощью GetHeapStatus.TotalAllocated.
Я не думаю, что мы можем позволить, чтобы строки выделяли вдвое больше памяти.
Нет ничего необычного в том, чтобы потреблять 500 МБ памяти для каждого клиента. Я думаю, что многое из этого в виде строк. Вероятно, мы стараемся максимально использовать AnsiString.
Привет