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

来源:互联网 发布:淘宝网天龙八部 编辑:程序博客网 时间:2024/06/09 15:01

最近在写一个检索磁盘的小软件。发现两个问题。以前利用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")

 

 

 

原创粉丝点击