荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: 编译代码
发信站: BBS 荔园晨风站 (Thu Jan 21 22:44:41 1999), 转信


    同其他4GL工具如Delphi、Visual Basic的早期版本一样,PowerB
uilder4.0以前所生成的可执行文件使用的是伪代码,也称P-Code(pse
udo-code)。P-Code在运行时是被解释执行的,更准确地说,P-Code使
用的是虚拟机指令,为不同的宿主机提供共享的操作命令。在运行时,
操作系统根据不同平台解释实现P-Code指令。一条P-Code指令可以替
代几条机器代码指令,这样就减少了执行代码的大小,不过却以应用的
执行效率为代价。一般情况下,P-Code的执行速度要慢于编译代码,但
文件的大小却小于编译代码。
    PowerBuilder 5.0引入了生成全编译的可执行代码的功能,以提
高运行效率,但同时它也保留了使用P-Code为可执行文件的功能。使
用P-Code的应用程序包括执行文件.EXE和PoweB uilder的动态链接库
..PBD,而编译代码所产生的执行文件为.EXE文件和动态链接库DLL。
    什么是编译代码
    编译代码首先以P-Code为基础,PowerBuilder首先根据P-Code创
建C代码,然后将C代码编译成为机器代码的执行文件。编译后的执行
程序中,所有指令都是实际的机器代码。这就意味着这样的执行文件
的大小将远大于P-Code。
    使用编译代码仍需要PowerBuilder的运行库,PowerBuilder在执
行机器代码时,仍使用共享的函数库,这样做的目的主要是为了节省内
存。使用动态链接库可以避免将所有的功能函数都写在一个可执行文
件中,以减小可执行文件的体积。而在Windows环境中,内存中留有一
份DLL的拷贝可以为多个应用程序使用。此外PowerBuilder 5.0还压
缩了一些DLL中函数的大小,现在32位平台上运行时只需7个动态链接
库,解压缩后为4.5M。应用所需要的其它DLL,如用于数据库访问、分
布式PowerBuilder及RTF编辑器等可在用到时动态地装入。
    编译代码创建
    编译代码的创建有以下几个步骤:
    在开发的过程中,PowerScript首先被翻译成了P-Code,当在Scrip
t编辑器中编写完一个事件或函数的代码返回窗口时,系统就会自动地
翻译这一段Script代码。当在工程画笔中创建P-Code可执行文件时,P
owerBuilder将为不同的PBL中不同对象之间的引用建立起连接,并将
这些对象拷贝到指定的EXE或PBD文件中。这是一个相对较快的过程。
    接下来P-Code将被翻译成为C语言的语句。在这一过程中,工程画
笔窗口下面的微帮助中将显示"compiling ... "的字样,这一过程约
占全部编译时间的10%。然后是将C代码编译和链接成为机器代码,形
成可执行文件和动态链接库,在这一步骤中,微帮助显示的是"generai
ng...",这一编译过程最费时间,约占90%的编译时间。
    通过上面的介绍,我们看到创建机器代码所用的时间比产生P-Cod
e的用时要多得多,因为后者只是一个二进制代码搬运的过程。因此在
开发过程中,我们一般使用的主要是P-Code,只是在最终交付用户使用
时,才根据实际情况选择是否创建机器代码。
    编译代码的优势
    在以下这几个方面,将PowerScript代码编译成为机器代码将得到
较快的运行速度:
    * 循环结构* 浮点运算* 整数运算* 函数调用但是在另外一些方
面,编译成为机器代码并不能使运行速度明显加快,如涉及图形用户界
面,数据库访问、小数运算、字符串操作等。在有些情况下,两种代码
的速度是相同的,如对资源的调用和对数据窗口的执行。在这些情况
下,就无法通过使用编译代码来提高运行速度了。
    如果应用是以执行自身的代码为主,例如应用中较多的是同一条
代码被反复执行(如循环)或是编写的代码主要用来进行数学运算,这
样的应用应当使用编译代码。在函数调用方面使用机器码也要比P-Co
de快得多。因此如果Script大量地调用函数或是采用新的语法形式调
用事件,使用机器码也将是个好的选择。不过应当记住,编译代码的执
行文件大小要比P-Coe大得多,因为一条PowerScript代码将有可能编
译成为5条甚至10条C代码。当这些C代码被编译后,可执行的代码将远
远大于相应的P-Code,因此如果应用程序的文件大小是首要考虑因素,
或者如果应用较多的是数据库访问,那应当选择使用P-Code。
    提高应用的性能
    事实上,一个好的数据库的物理设计和应用程序的模块设计可以
大大地提高应用的性能。如果应用设计不好,即使使用了编译代码,也
不会得到很好的系统性能。此外调整系统参数设置和合理的物理带宽
,可以使PowerBuilder 5.0的应用运行得十分快捷。
    在PowerBuilder 5.0中,系统内部已经在一些功能上进行了增强,
对这些功能加以利用本身就可以实现性能的优化。如:
    * 使用PowerBuilder 5.0的Tab控件时,如果在TabPage的属性中
选中"create on demad "这个复选框,在运行时,只有当用户选择这个
TabPage,PowerBuilder才去初始化该TabPag对象的实例。
    * 使用DataStore而不要使用不可视的DataWindow作为数据的缓
冲区。
    * 传递string、datetime等数据类型的参数尽可能使用readonly
方式,因为同采用reer ence方式相比,PowerBuilder无需为这些参数
再于内存中复制一份拷贝。同理,referenc方式要比value法传递更快
一些。
    * 使用局部变量要比全局和共享变量快一些,因为局部变量存在
栈中,而全局变量则存储于远堆。这个速度的差异在使用机器代码时
比P-Code更为明显。
    * 使用数组对DataWindow的数据进行赋值,而不要使用SetItem(
) 和GetItem( )系列的函数,因为前者只使用了一次函数,就调用了所
有的行和列。
    * 为加快编译速度,不要在一个事件或函数中编写过长的代码,可
将它们分成几个函数或其他可重用的代码对象。
    * 调整数据库。一般来说,数据库访问在客户/服务器结构的应用
中要占用大量的时间尽可能利用PowerBuilder的特性来减少数据库访
问的时间,包括:
    1.在5.0中DBParm缺省设置StaticBind = 1,也就是说在检索数据
之前,PowerBuilde r并不是首先获取查询数据结果集结构的描述,这
样可以提高数据的检索速度,但是如果数据窗口同数据库的结果集不
匹配时,将发生错误。因此如果需要动态改变数据窗口所查询的表,而
且这些表结构不同时,应当将StaticBind的值设置为0。
    2.DBParm缺省设置允许DataWindow放置BLOB字段,使用Data Pipe
line可以对数据库插入BLOB字段的数据。

    3.通过DBParm的设置可以使数据库支持游标。设置DBParm SQLCa
che = n将告诉PoweB uilder将为多少个使用不同SELECT语句的游标
建立缓冲。如果多次重复使用同一个SELEC语句,当缓冲区内有数据时
,检索的速度将大大加快。SQLCache的缺省值为0。
    4.PowerBuilder 5.0中对数据窗口有了这样一个选项,可以将数
据窗口的结果集保存在本地磁盘上。这样可以减少内存的使用,创建
更大的报表,不过存取速度比将结果集放在内存中要慢得多。如果数
据窗口将显示的不是一个很大的报表,一般还是将结果集放在内存中
为佳。

    其它的注意事项
    对于用户使用PowerBuilder编译代码,还有以下几点值得说明:
    * PowerBuilder产生编译代码的速度很慢,应尽可能使用主频较
快的计算机,最好64M内存,不过在5.0的版本中,多CPU对提高编译速度
没有任何帮助。
    * PowerBuilder所使用的Watcom的技术主要是32位的技术,尽管
在32位平台上有生成1位代码的选项,但是速度却并不见佳。另外在16
位平台上,我们不能产生32位的应用程序。
    * 编译16位应用程序有一个限制就是代码和数据都不能超过64K,
如果函数或事件中的代码过长,PowerBuilder在创建EXE时将产生错误
。我们推荐的解决办法就是将长代码分解成多个小函数,这样也可以
提高运行效率并有利于对应用代码的维护。
    * 如果在Windows NT或Windows 95上运行16位应用程序,所使用
的运行库也应当是16位的。
    * 在一个PowerBuilder应用中我们只能使用P-Code的PBD或编译
代码DLL中的一种,而不能将其混合使用,不过唯一的例外是使用Power
Builder创建OLE服务器。
    * 如果只想改变一个DLL,而并不想重新编译全部应用,则可以在L
ibrary画笔中选择"Lb rary|Build Runtime Library..."的菜单项。
    * 在编译时,系统将首先剔除注释语句,所以Script中注释语句的
多少对编译速度没有影响。
    * 在使用PowerBuilder的Plug-In技术时,不能使用编译代码

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店