2000 + вложенные объекты не так велики и не будут такими медленными, даже с RTTI (доступ к диску или сжатие будут намного медленнее).При прямой ручной сериализации SaveToStream это очень быстро, если вы используете FastMM4 (диспетчер памяти по умолчанию с Delphi 2006).
Возможно, вы можете изменить свой алгоритм и использовать вместо него динамические массивы (есть сериализатор с открытым исходным кодом здесь ).Но ваши данные могут не подходить для таких записей.
Или никогда / редко освобождать память, а использовать только объекты или ссылки на записи.Вы можете иметь пул объектов в памяти, с каким-то ручным сборщиком мусора и обрабатывать только ссылки на объекты (или записи).
Если у вас есть string
внутри объектов, вы не можете перераспределятьих и поддерживать глобальный список используемых строк: подсчет ссылок и копирование при записи сделают это намного быстрее, чем стандартная сериализация и распределение (даже с FastMM4).
Во всех случаях стоит сделать реальныйпрофилирование вашего приложения.Общее человеческое предположение о узких местах производительности в большинстве случаев неверно.Доверяйте только профилировщику и настенным часам.Возможно, ваша текущая реализация не такая медленная, и реальным узким местом является не объектный процесс, а где-то еще.
Не оптимизируйте слишком рано.«Сделайте это правильно, прежде чем делать это быстро. Проясните это, прежде чем делать это быстрее. Держите это правильно, когда вы делаете это быстрее».- Керниган и Плаугер, Элементы стиля программирования.