在构建ADO记录集时将数据拉入内存

Is data pulled into memory when building an ADO Recordset?

本文关键字:数据 内存 构建 ADO 记录      更新时间:2023-10-16

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

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

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

在这里使用Access数据库有几个问题:

  1. 假设它支持255个并发用户,实际上在6个20是最大数目,数据库连接较少规模/复杂性增加。
  2. 数据库大小的2Gb限制和
  3. 是的,数据在本地缓存,所以如果你有5000个结果你只能接受他们:)

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

也许异步获取行可以改善用户体验。请参阅ExecuteOptionEnum中的选项,这些选项可以与ADO记录集打开方法一起使用。我怀疑这是不是你心目中的"及时",但这是我能提供的最好的了。

在我看来,更好的设计是修改查询,只检索100K行的一个子集。那么"及时"就可以变成"让用户请求下一个子集"。并且您应该能够通过合理大小的记录集从Access获得体面的性能。