У меня есть приложение, которое создает и уничтожает тысячи объектов. Стоит ли кэшировать и повторно использовать объекты, или диспетчер памяти Delphi достаточно быстр, чтобы создание и уничтожение объектов несколько раз не было такими большими накладными расходами (в отличие от отслеживания кеша) Когда я говорю, стоит, конечно, я ищу для повышения производительности.





Только профилировщик скажет вам. Попробуйте оба подхода в тесном цикле и посмотрите, что получится лучше :-)
Я думаю, это зависит от кода, который ваши объекты будут выполнять во время создания и уничтожения. Воздействием TObject.Create и TObject.Destroy обычно можно пренебречь, и его можно легко перевесить из-за накладных расходов на кэширование.
Вы также должны учитывать, что состояние объекта при повторном использовании может отличаться от состояния после создания.
Часто единственный способ сказать - это попробовать.
Если текущая производительность адекватна, вам не нужно много времени, чтобы пытаться ее повысить. Однако, если у вас есть проблемы с производительностью, может помочь кеширование (или другие стратегии).
Вам также понадобится некоторая статистика о том, как часто используется конкретный объект (экземпляр). Если вы регулярно обращаетесь к одному и тому же набору данных, то кеширование может действительно улучшить производительность, но если доступы распределены по всем возможным объектам, то частота промахов в кэше может быть слишком высокой, чтобы это стоило того.
Из недавнего тестирования - если создание объекта не требует больших затрат (т.е. не зависит от внешних ресурсов - доступа к файлам, реестру, базе данных ...), тогда вам будет сложно победить диспетчер памяти Delphi. Это так быстро.
Это, конечно, верно, если вы используете последнюю версию Delphi - если нет, получите FastMM4 из SourceForge и используйте его вместо внутреннего MM Delphi.
Выделение памяти - это лишь малая часть того, почему вы хотите кэшировать. Вам необходимо знать полную стоимость создания семантически допустимого объекта и сравнивать ее со стоимостью извлечения элементов из кеша, а не только для микротеста: эффекты кеша (то есть кэш ЦП) могут изменить динамику времени выполнения. в реальном работающем приложении.
Или, другими словами, измерить и узнать. Если вы не измеряете, вы не занимаетесь разработкой, а просто предполагаете.
Чтобы ответить на подобные вопросы, вам абсолютно необходимо измерить нагрузку в реальном мире. В зависимости от того, какие ресурсы хранятся в этих объектах, конкуренция за ресурсы, стоимость строительства, размер и т. д., Ответ может вас удивить и даже может измениться в зависимости от характера нагрузки.
Обычно очень сложно определить, где будут проблемы с производительностью, без измерения.
Я слышу, что вы говорите. Я просто хотел узнать, стоит ли вообще заниматься профилированием этой области!
Я знаю, что ты прав. Мне просто было интересно, стоит ли вообще проводить сравнительный анализ в этой области или сосредоточить свои усилия на другом. Хорошая работа с новыми функциями в компиляторе D2009, кстати !!