Данные помещаются в память при создании набора записей ADO? - PullRequest
1 голос
/ 02 ноября 2011

Я работал над довольно большим проектом C ++, который неожиданно использует MS Access 97 в качестве основного движка базы данных. Я заметил много случаев в коде, где наборы записей создаются на основе запросов, которые потенциально могут возвратить более 100 000 записей.

Мне любопытно, будет ли ADO извлекать все эти данные в память, когда вы создаете набор записей, или если он умнее и способен загружать данные только "вовремя", когда вы пытаетесь прочитать их из набора записей ? Мы получаем много жалоб от пользователей, и это выглядит подозрительно виноватым для меня.

(Миграция на новый движок базы данных находится в нашей дорожной карте. Поверьте, никто в команде не доволен Access)

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Мне любопытно, будет ли ADO извлекать все эти данные в память, когда вы создаете набор записей, или если он умнее и способен загружать данные только «вовремя», когда вы пытаетесь их прочитать.из набора записей?

Возможно, асинхронная выборка строк может улучшить работу ваших пользователей.См. Параметры из ExecuteOptionEnum , которые можно использовать с ADO Recordset Open Method .Я сомневаюсь, что это то, что вы имели в виду для «как раз вовремя», но это лучшее, что я могу предложить.

Мне кажется, лучше было бы пересмотреть запрос, чтобы получить только подмножество строк из 100 КБ.,Тогда «как раз вовремя» может стать «позволить пользователю запросить следующее подмножество».И вы должны быть в состоянии получить приличную производительность от Access с набором записей разумного размера.

1 голос
/ 02 ноября 2011

Есть несколько проблем с использованием Access для базы данных здесь:

  1. Предположительно, он поддерживает 255 одновременных пользователей, в действительности между 6 и 20 - максимальное число, с меньшим количеством соединений в качестве базы данных размер / сложность увеличивается.
  2. ограничение 2 ГБ на размер базы данных и
  3. Да, данные кэшируются локально, поэтому, если у вас есть 5000 результатов, то вам просто нужно принять их:)
...