2009年5月4日星期一

PB程序优化建议

①每个pbl不要过大。对于比较大的要经行功能分离。
②尽量使用数据窗口和DATASTORE.即使是必须用SQL语句的时候,也应该尽量将它们定义为存储过程(特别是在多用户的环境中),以提高应用程序的性能.
③在程序中应当尽量使用SETTRANSOBJECT(),因为SETTRANS()函数在每次调用RETRIEVE(),UPDATE()等函数之后,都要执行数据库的连接和断开操作.
④多处频繁使用的数据考虑共享dw_main.Share(dw_suborder)
⑤数据窗口之间的copy:
dw_1.rowscopy(lr,lr,primary!,dw_2,100,primary!)
dw_2.object.data=da_1.object.data.selected
第二种方法要快
⑥在程序中访问数据窗口的属性有下列几种方法:
A1.采用点表达式访问
A2.应用多个独立的DESCRIBE()函数访问
A3.只使用一个DESCRIBE()函数,采用复合参数访问多个属性
上面三中方法,通常第一种方法最慢,第三种方法最快.
⑦在程序中修改数据窗口的属性有下列几种方法:
A1.采用点表达式修改
A2.应用多个独立的MODIFY()函数访问
A3.只使用一个MODIFY()函数,采用复合参数访问多个属性
上面三种方法,通常第一种方法最慢,第三种方法最快.
⑧使用setredraw((FALSE)与setredraw(true)函数以减少屏幕的重绘,否则,执行速度将严重下降。
⑨获得当前行号,应尽量使用数据窗口的CURRENTROW变量,而少用GETROW()函数
⑩数据窗多用object.的形式,少用getitem,setitem函数
11对于数据窗口控制中经常发生的事件,应当尽量减少其中的程序代码.特别是如下事件:
a.itemchanged
b.editchanged
c.itemfocuschanged
d.pbm_dwnkey
e.rowfocuschanged
f.retrieverow
在这些事件中的任何处理程序,都会降低应用程序的处理速度.所以应当尽量减少这些事件中的处理程序,必要时,可以考虑只将重要的代码放在这些事件中,而将剩余的代码放在一个传递的事件中.
例如,如果需要用到数据窗口的ROWFOCUSCHANGED事件,可以为数据窗口定义一用户事件UE_RE,而在数据窗口的ROWFOCUSCHANGED事件中写如下代码:
PARENT.postevent(ue_re)
在UE_RE事件中再编写相应的程序代码
12数据窗口中包含许多复杂的计算域,将严重影响数据窗口的执行速度。


没有评论:

发表评论