我正在使用TIBDataSet
使用Delphi 2007从Firebird数据库表中获取记录。该表中有大约100万条记录,我收到Out of memory
错误。相同的查询可以使用TClientDataset
正确运行。
请告诉我TClientDataset
和TDataSet
关于内存管理的区别?
答案 0 :(得分:-1)
@alzaimar有一个观点,无论你使用什么数据集组件,在32位平台上加载到内存中的数百万条记录将是一个挑战。
所以盒子上的内存至关重要。
我们使用Delphi 2006编写的应用程序执行类似的操作。我们所做的是在Windows7 64位或服务器2008 64位上运行它们。
利用操作系统和其他应用程序的附加内存。
尝试The best memory manager for Delphi
还将{$ SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}放在yur项目的源代码中,以便从64位盒子上的32位delphi中获得4GB。
program Project15;
uses
Forms,
Unit15 in 'Unit15.pas' {Form15};
{$R *.res}
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
begin
Application.Initialize;
Application.CreateForm(TForm15, Form15);
Application.Run;
end.
执行上述操作可以让您了解哪种方法最适合您的应用程序TDataSet或TClientDatset。
您可能还会考虑使用一些第三方数据连接组件,这些组件在基本Delphi数据对象上具有改进的性能和内存管理。
我们使用Devart组件和SQL工具,它们确实物有所值。 Devart Data tools website