【问题标题】:Suggestions for caching a dataset缓存数据集的建议
【发布时间】:2010-10-07 10:07:19
【问题描述】:

我想执行以下操作:

1) 打开一个数据集(使用 TMSQuery、SDAC DevArt 组件)

2) 将内容缓存到磁盘(想象一个切割者列表)

3) 下次我需要打开数据集时,我将首先使用缓存数据填充它,然后我将通过调用 TMSQuery.RefreshQuick 方法对其进行刷新。

我计划通过这种方式大幅提高速度,因为我不需要检索在之前的应用程序运行中已经检索到的记录。

我怎样才能获得这种缓存?我有许多带有 TMSQuery 的数据模块,所以不知何故,我希望有一个全局例程来检查每次我尝试打开 TMSQuery 时,如果该查询以某种方式被标记,我将尝试从缓存中恢复,调用 RefreshQuick,以防万一失败我将调用 Open。​​

你能推荐一下吗?

(我使用 Delphi 2009 和 SDAC 4.80)

【问题讨论】:

  • 刷新数据的时候,需要和数据库中的值进行比较,所以还是要查询所有的数据。这如何提高速度?你有一个 DateModified 字段或什么?
  • 我打算使用 TMSQuery.RegreshQuick 方法。

标签: delphi caching devart


【解决方案1】:

您可以为此使用TClientDataSetTDataSetProvider 组件,以这种方式连接组件。

TMSQuery->TDataSetProvider->TClientDataSet

TClientDataSet 是从磁盘持久化和检索数据的一个很好的替代方案。

有关 ClientDataset 的更多信息,请参阅这些链接

【讨论】:

    【解决方案2】:

    你可以做两件事:

    1. 创建 TMSQuery 组件的后代并覆盖 Open 函数 (您使用 TMSQuery 搜索所有数据模块 .dfm 和 .pas 文件并替换为 TCachedTMSQuery)
    2. 绕过/挂钩 TMSQuery.Open(运行时修补)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2017-12-11
      • 1970-01-01
      • 2011-07-07
      • 2020-09-28
      • 2011-03-16
      • 1970-01-01
      • 2018-06-05
      相关资源
      最近更新 更多