Powerbuilder中,数组无法在使用完后释放空间,datastore插入行的速度只有dw的百分之一。

时间:2021-08-16 00:51:03


最近在写一个检索磁盘的小软件。发现两个问题。以前利用dt和dw处理数据的行数很少。很难发现这个问题。

 

1. 数组无法在使用完后释放空间

2. datastore插入行(insertrow())的速度只有dw的百分之一

 

最开始使用findfirstfile,findnextfile将文件信息放入大数组中。但是发现使用完后。即使手动调用垃圾回收函数。数组占据的数百兆空间无法归还给操作系统。则想了一个办法。把dt直接作为ref传给uo去写入检索出来的文件信息。但是发现一个问题。用datastore的插入速度只有dw的百分之一,所以造成在uo中的dt_1.insertrow(0)成为最慢的瓶颈。不知道是怎么回事。以往的考虑都是尽量用dt,因为没界面,现在现在才发现dw的插入要快得多,5万行只要6秒;而dt插入5万行要几分钟。我想。这可能是跟dw有预先分配足够的空间吧。具体原因望哪位能指出一下。。。

 

//这是测试代码
dts_fileslist.reset()
long i
for i = 1 to 50000
yield()
dts_fileslist.insertrow(0)
if mod(i,200) = 0 then this.text = string(i)
next
messagebox("","OK")
//
dw_1.reset()
long i
dw_1.setredraw(false)
for i = 1 to 50000
yield()
dw_1.insertrow(0)
if mod(i,200) = 0 then this.text = string(i)
next
dw_1.setredraw(true)
messagebox("","OK")