gpt4 book ai didi

delphi - 释放数组 DML 操作的内存

转载 作者:行者123 更新时间:2023-12-03 15:36:15 28 4
gpt4 key购买 nike

我正在使用数组 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

关于delphi - 释放数组 DML 操作的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38139661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com