当前位置: 代码迷 >> PB >> 求讨论上数据窗口object.字段名 跟getitem的区别跟联系
  详细解决方案

求讨论上数据窗口object.字段名 跟getitem的区别跟联系

热度:52   发布时间:2016-04-29 08:01:15.0
求讨论下数据窗口object.字段名 跟getitem的区别跟联系
在网上也看了下资料,关于用哪个快?最规范?还是object仅仅是为了保留之前的兼容性才一直没有废弃。。

------解决方案--------------------
getitem系列方法更快。
------解决方案--------------------
getitem是制定了数据类型的取值,当然比没有指定取值类型的object.字段名来得快
------解决方案--------------------
object.data 和getitem差不多,是最快的


------解决方案--------------------
测试过了,20万行的记录,用for循环来读取数据
for i = 1 to dw_1.rowcount()
ls = dw_1.getitemstring(1, 'a')
next
历时:1485毫秒

for i = 1 to dw_1.rowcount()
ls = dw_1.object.a[i]
next
历时:4313毫秒

差距明显,其实不用测试也可以得出结论
object.获得的数据类型是any,再赋值给具体的类型,还得经过类型转换这一步,时间绝对要长一些,当然这一步转换时间差不是特别大

效率差距还是在于从数据窗口中获取数据


------解决方案--------------------
但用数据组读一例数据,object.字段 比getitem一个个读快了很多。
------解决方案--------------------
嘿嘿,很有意义的讨论!

应该是getitemxxx()快些吧。不过本人比较懒,平常都是用object.xxx,打代码时快些。惭愧。

To yyoinge:
ls = dw_1.getitemstring(1, 'a'),其中的1是笔误吧?如果是测试的代码,得改成ls = dw_1.getitemstring(i, 'a')再测试下,结果才更实在。

------解决方案--------------------
探讨
嘿嘿,很有意义的讨论!

应该是getitemxxx()快些吧。不过本人比较懒,平常都是用object.xxx,打代码时快些。惭愧。

To yyoinge:
ls = dw_1.getitemstring(1, 'a'),其中的1是笔误吧?如果是测试的代码,得改成ls = dw_1.getitemstring(i, 'a')再测试下,结果才更实在。

------解决方案--------------------
yyoinge正解,按理论上来,getitem应该快点的,不过没有测试过。。。
------解决方案--------------------
如果数据量小 两种差距感觉不出来 
如果数据量特别大 需要循环挨个取的话 还是得做成后台处理或其他方式 总不能给客户个死机状界面 那时间多点少点 也无所谓了
------解决方案--------------------
使用object.data是好,又快又有一般性。

一整列可以

dwobject dwo

dwo=object.__get_attribute("字段名",false)

dwo.primary 也有一般性,且速度快。

getitem的缺点是要分类型处理
------解决方案--------------------
都是高手呀,受教了
  相关解决方案