首页 / 浏览问题 / 组件GIS / 问题详情
记录集的遍历速度能提升嘛?
70EXP 2023年11月27日
现在有一个两万六条记录的shp,不仅要遍历一遍还需要对每条记录做计算进行数据写入。我做过对比,不同的cpu,速度并没有多大提升

想问问有没有什么办法可以提高效率?

1个回答

您好,有以下建议:
1.处理过程中推荐使用“文件型数据源”,它的速度比数据库型数据源要快。若您的数据最终需要存储在“数据库型数据源”,您可以在“文件型数据源”处理完成后再复制到“数据库型数据源”。


2.在处理代码中使用“批量处理”,关键API为:

recordset.getBatch().setMaxRecordCount(1000);
recordset.getBatch().begin();
recordset.getBatch().update();

您可以参考 SuperMap iObjects Java 安装目录下SampleCode 中的 “BatchAdd”示例代码。

希望能对您有帮助。

360EXP 2023年11月27日
这个最大记录该如何设置比较好呢?我设置的8000
您好,

setMaxRecordCount “设置批量更新操作结果提交的最大记录数”,其具体工作原理为

当所有需要更新的记录批量更新完成后,在提交更新结果时,如果更新的记录数超过了这个最大记录数时,系统将分批提交更新的结果,即每次提交最大记录数目个记录,直到所有的更新记录都提交完毕。例如,如果设定提交的最大记录数为1000,而需要更新的记录数为3800,那么批量更新记录后,在提交结果时,系统将分四次提交更新结果,即第一次提交1000条记录,第二次1000条,第三次1000条,第四次800条。

这里您的数据两万六条记录的shp,所以:
如果您是UDB文件型数据源,系统提交属于本地磁盘IO 无太大影响。

如过您使用的是数据库型数据源,系统提交时属于向数据库插入数据,受网速和数据库链接池影响,建议您设置在500-1000条。如果您单条记录的geometry坐标信息非常多需酌情减小该数值。

您好,值得注意的是, 批量更新操作只支持添加记录。

...