构建ADO Recordset时是否将数据存入内存?

时间:2011-11-02 12:46:50

标签: c++ ms-access ado

我一直在研究一个相当大的C ++项目,它令人惊讶地使用MS Access 97作为它的底层数据库引擎。我注意到代码中有很多实例,其中记录集是从可能返回超过100,000条记录的查询中创建的。

我很好奇ADO是否会在构建记录集时将所有数据存入内存,或者它是否更智能并且只能在您尝试从记录集中读取数据时“及时”加载数据?我们收到了很多客户的性能投诉,这看起来很可疑。

(迁移到更新的数据库引擎是我们的路线图。相信我,团队中没有人对Access感到满意)

2 个答案:

答案 0 :(得分:1)

此处使用Access进行数据库存在以下几个问题:

  1. 据说它支持255个并发用户,实际上是6个 20是最大数字,数据库连接较少 尺寸/复杂性增加。
  2. 数据库大小的2Gb限制和
  3. 是的,数据在本地缓存,因此如果您有5000个结果 你只需要接受它们:)

答案 1 :(得分:1)

我很好奇ADO是否会在构建记录集时将所有数据存入内存,或者它是否更智能并且只能在您尝试读取时“及时”加载数据记录集?

或许异步提取行可以改善用户的体验。请参阅ExecuteOptionEnum中可与ADO Recordset Open Method一起使用的选项。我怀疑这是“及时”的想法,但这是我能提供的最好的。

在我看来,更好的设计是修改查询以仅检索100K行的子集。然后“及时”可能变成“让用户请求下一个子集”。而且你应该能够通过合理大小的记录集从Access获得不错的性能。