我正在测试一些数据库组件,例如SDAC
和其他人,我发现了一些有趣的东西:
当我使用TADOQuery
执行查询并且此查询包含大量blob字段并且我获得所有行(fetchall
)时,我的应用程序的内存接近1.8GB并且一切正常。
使用其他组件,在同一个数据库上执行的相同查询会产生Out of Memory
异常,因为它超过1.8GB的内存使用量。
我知道我不应该返回所有这些行,我应该使用分页和blablabla。但我很好奇ADO如何设法让所有行和其他组件都不能使用。
我认为ADO正在压缩内存中的blob,但这只是猜测。
有谁知道为什么ADO中的内存使用情况如此之好?
答案 0 :(得分:1)
我不能说SDAC,但会说AnyDAC TADQuery:
此外,很少有其他技术可以在获取大型结果集时减少内存使用量。要正确使用它们,开发人员应该知道将返回什么类型的数据。某些选项使用的价格可能会略微降低获取性能。