delphi – 释放数组DML操作的内存
发布时间:2020-12-15 09:11:26 所属栏目:大数据 来源:网络整理
导读:我正在使用数组DML操作来加速将大量记录插入到SQL数据库中.原理描述为 here.示例代码如何使用此功能: TFDQuery *FDQuery1;...FDQuery1-SQL-Text = "insert into MyTab values (:p1,:p2,:p3)";// here FDQuery1-Params collection is filled by 3 parameters
我正在使用数组DML操作来加速将大量记录插入到SQL数据库中.原理描述为
here.示例代码如何使用此功能:
TFDQuery *FDQuery1; ... FDQuery1->SQL->Text = "insert into MyTab values (:p1,:p2,:p3)"; // here FDQuery1->Params collection is filled by 3 parameters const int array_size = 100; FDQuery1->Params->ArraySize = array_size; FDQuery->Prepared = true; for(int i = 0; i < array_size; i++) { FDQuery1->Params[0]->AsIntegers[i] = i; FDQuery1->Params[1]->AsStrings[i] = "qwe"; FDQuery1->Params[2]->Clear(i); } FDQuery1->Execute(array_size); 本质上它意味着我不是为插入的每一行调用数据库引擎客户端函数,而是首先准备我需要作为数组插入的数据.阵列的典型大小为1000个项目.然后我用数组作为参数调用客户端函数.遗憾的是,在释放参数数组的内存时,无法描述文档.当我没有准备查询时,它完成了吗? TFDQuery *query; ... query->Prepared = false; 或者在我关闭查询时完成了吗? query->Close(); 或者在我将数组大小设置为1时完成? query->Params->ArraySize = 1 解决方法
参数集合应该在设备未准备或关闭时保持不变,因为它是一个手动填充的集合(当命令被分配并且启用了
ParamCreate时,它由预处理器自动预填充;在命令准备时更正).但是您可能希望稍后执行相同的命令而不设置相同的集合.
如果您知道不会再次执行相同的命令,则可以调用Clear方法: query->Params->Clear(); 如果要保留参数设置,并仅释放值存储所消耗的资源,则可以通过ArraySize属性减少参数行数: query->Params->ArraySize = 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |