FDQuery导致内存不足异常

Niy*_*maz 5 delphi firebird out-of-memory firedac

我有一个拥有300万条记录的Firebird数据库。我FetchOptionsRowsetSize := 1000FetchAll禁用。我在本地主机上工作。

我没有一页一页浏览的问题,但是当我单击中的“ 转到最后一条记录 ”按钮时DBNavigator,会抛出“ 内存不足 ”异常。

如果将UniDirectionalproperty 设置为True,则没有问题。但是,移至最后一条记录会使应用程序冻结30-40秒。

有什么问题和解决方法?

Uwe*_*abe 1

当 FireDAC 查询设置为单向时,它将在访问记录后从内存中删除记录。这可以确保不会发生内存溢出。

移动到最后一条记录时的时间延迟是由于访问每个中间记录而导致的,这显然需要一些时间。

  • 如果仅从一个表中选择数据并且该表具有主键,则可以使用 TFDTable 而不是 TFDQuery,并将 CachedUpdates 设置为 false,将 FetchOptions,Unidirective 设置为 false,将 FetchOptions.CursorKind 设置为 ckAutomatic 或 ckDynamic。然后,TFDTable 在实时数据窗口模式下运行,为大型表提供更好的性能。 (3认同)