2012-01-11 59 views
2

我測試了一些數據庫組件,如SDAC和別人,我發現了一些有趣的事情:AdoQuery如何處理斑點?

當我執行一個查詢與TADOQuery和這個查詢有很多BLOB字段的,我得到的所有行(fetchall)內存我的應用程序接近1.8GB,一切正常。

使用其他組件時,在同一數據庫上執行的相同查詢將拋出Out of Memory異常,因爲它超過了1.8GB的內存使用量。

我知道我不應該返回所有這些行,我應該使用分頁和blablabla。但我很好奇ADO如何管理所有行和其他組件不能。

我認爲ADO正在壓縮內存中的斑點,但這只是一個猜測。

有沒有人知道爲什麼ADO中的內存使用如此之好?

回答

1

我不能說SDAC,但會說AnyDAC TADQuery:

  • 如果從類別FetchOptions排除fiBlobs。 Items,那麼AnyDAC將不會立即獲取BLOB值。但是會延遲提取,直到應用程序真的需要一個BLOB值;
  • 設置FormatOptions。 InlineDataSize爲更小的值,將減少獲取具有多個字符字段的大型結果集時的內存使用量;
  • 指定FormatOptions。 MapRules,應用程序可以選擇更緊湊的數據類型表示。

此外,還有其他一些技術,可以減少獲取大型結果集時的內存使用量。要正確使用它們,開發人員應該知道將返回哪種數據。某些選項使用的價格可能會略微降低獲取性能。

+0

對不起,但那不能回答我的問題。我非常瞭解你的組件,特別是sdac,但我對TADOQuery如何在內部工作感興趣。 – 2012-01-17 18:28:07