Есть несколько замечательных предложений по производительности, сделанных другими людьми, которые вы должны реализовать в Delphi.Вы должны рассмотреть их.Я сосредоточусь на ADO.
Вы не указали, что такое внутренний сервер базы данных, поэтому я не могу быть слишком конкретным, но есть некоторые вещи, которые вы должны знать об ADO.
ADO RecordSet
В ADO есть объект RecordSet.В данном случае этот объект RecordSet является в основном вашим ResultSet.Интересная вещь в итерации через RecordSet заключается в том, что он все еще связан с провайдером.
Тип курсора
Если тип вашего курсора - динамический или набор ключей по умолчанию Delphi, то каждыйВ тот момент, когда RecordSet запрашивает новую строку у провайдера, провайдер проверит, есть ли какие-либо изменения, прежде чем он вернет запись.
Итак, для TADOQuery, где все, что вы делаете, читает набор результатовчтобы заполнить поле со списком, и оно вряд ли изменилось, вы должны использовать тип статического курсора, чтобы не проверять наличие обновленных записей.
Если вы не знаете, что такое курсор, при вызове функцииКак и Далее, вы перемещаете курсор, который представляет текущую запись.
Не каждый провайдер поддерживает все типы курсоров.
CacheSize
Размер кэша Delphi и ADO по умолчанию для RecordSet равен 1. Это 1 запись.Это работает в сочетании с типом курсора.Размер кэша сообщает RecordSet, сколько записей нужно извлечь и сохранить за раз.
Когда вы запускаете команду типа Next (действительно MoveNext в ADO) с размером кэша 1, RecordSet имеет только текущую запись впамяти, поэтому, когда он выбирает эту следующую запись, он должен снова запросить ее у провайдера.Если курсор не является статическим, это дает провайдеру возможность получить последние данные перед возвратом следующей записи.Таким образом, размер 1 имеет смысл для Keyset или Dynamic, потому что вы хотите, чтобы поставщик мог получать обновленные данные.
Очевидно, что при значении 1 существует связь между поставщиком и RecordSet каждыйвремя переместить курсор.Ну, это накладные расходы, которые нам не нужны, если тип курсора статический.Таким образом, увеличение размера кэша приведет к уменьшению количества циклов между RecordSet и провайдером.Это также увеличивает ваши требования к памяти, но это должно быть быстрее.
Также обратите внимание, что при размере кеша больше 1 для курсоров Keyset, если нужная запись находится в кеше, она не будет запрашивать ееснова от провайдера, а это значит, что вы не увидите обновления.