Я работаю с командой для более крупного приложения с Delphi 2007. Он использует большую унаследованную структуру для доступа к данным. Оба приложения и рамки используют String как тип данных для строк. Я начал изменять код в фреймворке для поддержки строк Delphi 2009, см. Мои предыдущие вопросы об этом.Как выбрать путь миграции из Delphi 2007
Я вижу 2 варианта теперь:
Alt 1 - Продолжать использовать строку, как и раньше. Это, пожалуй, самое чистое решение, так как инфраструктура будет поддерживать Unicode. Но код в рамках должен быть сильно изменен, чтобы это работало. Это требует глубокого понимания внутренних алгоритмов в рамках. Это также больший шанс ввести новые ошибки.
Alt 2 - Заменить строку 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 как можно больше.
С уважением
Интересные комментарии от всех, спасибо! По-видимому, неясно, что выбрать. Я чувствую себя немного больше для Alt 2, но комментарий Андреаса беспокоит меня. Если Pos вернет неправильный указатель, он может ввести новые ошибки. –
См. Редактирование в моем ответе: «ссылка на сеанс Unicode на CodeRage 4 и объяснение того, что происходит в ситуации, описанной Андреасом». –