delphi - AdoQuery 如何处理 blob?

标签 delphi memory delphi-2010 ado

我正在测试一些数据库组件,例如 SDAC 等,我发现了一些有趣的东西:

当我使用 TADOQuery 执行查询并且该查询有很多 blob 字段并且我获取所有行 (fetchall) 时,我的应用程序的内存接近 1.8 GB 一切正常。

使用其他组件,在同一数据库上执行的同一查询会引发内存不足异常,因为它超过了 1.8GB 的​​内存使用量。

我知道我不应该返回所有这些行,我应该使用分页和 blablabla。但我很好奇 ADO 如何设法获取所有行而其他组件却不能。

我认为 ADO 正在压缩内存中的 blob,但这只是一个猜测。

有谁知道为什么 ADO 中的内存使用率这么好?

最佳答案

我不能说关于SDAC,但会说关于AnyDAC TAD查询:

  • 如果从 FetchOptions 中排除 fiBlob。 Items ,那么 AnyDAC 将不会立即获取 BLOB 值。但会推迟获取,直到应用程序真正需要 BLOB 值;
  • 设置格式选项。 InlineDataSize设置为更小的值,将减少获取具有多个字符字段的大型结果集时的内存使用量;
  • 指定格式选项。 MapRules ,应用程序可以选择更紧凑的数据类型表示。

此外,还有一些其他技术可以在获取大型结果集时减少内存使用。为了正确使用它们,开发人员应该知道将返回什么类型的数据。使用某些选项的代价可能是稍微降低获取性能。

关于delphi - AdoQuery 如何处理 blob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823284/

相关文章:

delphi - 自重启服务(不询问系统)

delphi - BDE 到 FireDAC : pack table, 重新生成索引

python - 配置所有导入的内存成本?

delphi - 如何更改delphi GUI样式?

delphi - 将 SQL Server 查询转换为 Delphi 语法

delphi - 如何释放delphi应用程序中c++ dll中分配的内存

Delphi 2010 虚拟键盘,以 CapsLock 启动?

delphi - 如何使用编辑而不是 DBNavigator 将数据添加到 Delphi 中的数据库?

ios - CorePlot 多个散点图内存消耗巨大

c - 为什么内存在我的 C 反向列表函数中泄漏?