优化程序性能的方法 优化你的PowerBuilder程序
优化你的PowerBuilder程序

一段程序 完成所需要的功能固然重要 但是提高执行效率 提高代码的可重复利用性 提高程序的可读性也是很重要的 刚刚读了一个前辈的帖子 感觉受益匪浅 拿出来与大家共享
优化你的PowerBuilder程序 一 处理 SQL 语句 缓冲 SQL 语句 在应用程序中 有时需要反复调用同一组SQL语句 在这种情况下 可以通过在应用中为这些 SQL建立缓冲区来提高执行性能 在缺省情况下 SQL语句的缓冲区是关闭的 你可以通过如下语句打开它 SQLCACHE = n n 表示装入缓冲区的 SQL 语句数量(缺省为 ) 例如 dw_ SetTransObject(sqlca) SQLCA dbParm = SQLCache = dw_ retrieve() 如果将上例的 SQLCache = 改为 SQLCache = 此句的执行效率将提高五分之一左右 但应注意缓冲区的大小 否则也将影响程序执行的性能 注 此方法对用 ODBC 和 ORACLE 连接的数据库非常有效 捆绑变量 请看下例 SQLCA DBPARM = DISABLEBIND= INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) 这里未使用捆绑变量 再插入时 PB 将重新处理每个带有新值的SQL语句 如果将上例改为 SQLCA DBPARM = DISABLEBIND= INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) INSERT INTO DA_DH VALUES( 河南 ) 则系统将把 INSERT 语句按如下格式进行处理 INSERT INTO DA_DH VALUES(? ?) 其中 ? 称为占位符 系统性能将有所增强 用数据窗口代替 SQL 语句 通常 为了获得某些数据 采用数据窗口和 SQL 语句都是可行的 但是PB 对数据窗口和 SQL 语句采用不同的处理机制 因此 具有不同的效率 例 为里检索电话档案中的用户名 可以利用 SQL 语句 将所有的数据检索到一个多行编辑中 也可以检索到一个数据窗口中 如果使用第一种方法 首先定义一个游标 DECLARE CUR CURSOR FOR SELECT DA_DH HM FROM DA_DH ; 然后可以 STRING stxt[] st int li open cur do li = li + fetch cur into :stxt[li] ; st=st+stxt[li] + ~r~n loop while stxt[li]<> close cur; mle_ txt = st 也可以使用第二种方法 dw_ settransobject(sqlca) dw_ retrieve() 利用 POWERBUILDER PROFILER 工具进行检查 对比两种方法所需时间如下 方法 所需时间 (百分之一秒) SQL 语句 数据窗口 由于数据窗口或DATASTORE使用了标准的内嵌代码 而不是由开发人员进行全部编码 同时编译执行的速度比解释执行的速度快的多 因此在开发过程中应尽量使用数据窗口和DATASTORE 即使是必须用SQL语句的时候 也应该尽量将它们定义为存储过程(特别是在多用户的环境中) 以提高应用程序的性能
lishixinzhi/Article/program/SQL/201311/16334