整理我的硬盘,看到一篇不起眼的文章,我也是第一次看,有时间再推出我的BLOG了,一直忙,没有时间打造我的CSS(Blog界面说实话太寒酸了,

hygougou 2005-04-18 07:13:25
同其他4GL工具如Delphi,Visual Basic的早期版本一样,PowerBuilder4.0 以前所生成的可执行文件使用是伪代码,也称P-Code(pseudo-code)。P-Code在运行时是被解释执行的,更 准确地说,P-Code使用的是虚拟机指令,为不同的宿主机提供共享的操作命令。在运行时,操作系统根据不同平台解释实现P-Code 指 令。 一条P-Code指令可以替代几条机器代码指令,这样就减小了执行 代码的大小,不过却以应用的执行效率为代价。一般的,P-Code的执行速度要慢于编 译代码,但文件的大小却小于编译代码。
   PowerBuilder 5.0引入了生成全编译的可执行代码的功能,以提高运行效率,但同时它也保留了 使用P-Code为可执行文件的功能。使用P-Code的应用程序包括执行文件.EXE和PowerBuilder 的动态连 接库.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, 当您在Script编辑器中编写完一个事件 或函数的代码返回窗口时,系统就会自动地翻译这一段Script代码。当您在工程画笔中创 建P-Code可 执行文件时,PowerBuilder将为不同的PBL中不同对象之间的引用建立起连接,并将这些对象拷贝到指 定的EXE或PBD文件中。这是一个相对较快的过程。
   接下来P-Code将被翻译成为C语言的语句。在这一过程中,工程画笔窗口下面的微帮助中将显示"compiling ... " 的字样,这一过程约占全部编译时间的10%。然后是将C代码编译和链接成为机器代码,形成可执行文件和动态连接库,在这一步骤中,微帮助显示的是"generating...",这一编译过 程最费时间,将占约90 %的编译时间。

   通过上面的介绍,我们看到创建机器代码所用的时间比产生P-Code的用时要多得多,因为后者只 是一个二进制代码搬运的过程。因此在开发过程中,我们一般使用的主要是P-Code,只是在最终交付用户使用时,才根据实际情况选择是否创建机器代码。
   编 译 代 码 的 优 势:
   在以下这几个方面,将PowerScript代码编译成为机器代码将得到较快的运行速度:
循环结构
浮点运算
整数运算
函数调用
   但 是 在 另 外 的 一 些 方 面, 编 译 成 为 机 器 代 码 并 不能 使 运 行 速 度 明 显 加 快, 如 涉 及 图 形 用 户 界 面, 数 据 库 访问, 小 数 运 算, 字 符 串 操 作 等。 在 有 些 情 况 下, 两 种 代 码的 速 度 是 相 同 的, 如 对 资 源 的 调 用 和 对 数 据 窗 口 的 执 行。在 这 些 情 况 下, 您 就 无 法 通 过 使 用 编 译 代 码 来 提 高 运 行的 速 度 了。

   如 果 您 的 应 用 是 以 执 行 自 身 的 代 码 为 主, 例 如 应用 中 较 多 的 是 同 一 条 代 码 被 反 复 执 行( 如 循 环) 或 是 编 写的 代 码 主 要 用 来 进 行 数 学 运 算, 这 样 的 应 用 应 当 使 用 编译 代 码。 在 函 数 调 用 方 面, 使 用 机 器 码 也 要 比P-Code 快 得 多。因 此 如 果 您 的Script 大 量 的 调 用 函 数 或 是 采 用 新 的 语 法 形式 调 用 事 件, 使 用 机 器 码 也 将 是 个 好 的 选 择。 不 过 您 应 当记 住, 编 译 代 码 的 执 行 文 件 大 小 要 比P-Code 大 得 多, 因 为 一条PowerScript 代 码 将 有 可 能 编 译 成 为5 条 甚 至10 条C 代 码。 当这 些C 代 码 被 编 译 后, 可 执 行 的 代 码 将 远 远 大 于 相 应 的P-Code,因 此 如 果 您 的 应 用 程 序 的 文 件 大 小 是 您 应 用 的 首 要 考 虑因 素, 或 者 您 的 应 用 较 多 的 是 数 据 库 访 问, 那 您 应 当 选 择使 用P-Code。

提 高 应 用 的 性 能
   事 实 上, 一 个 好 的 数 据 库 的 物 理 设 计 和 应 用 程 序的 模 块 设 计 可 以 大 大 地 提 高 应 用 的 性 能。 如 果 应 用 设 计不 好, 即 使 使 用 了 编 译 代 码, 也 不 会 得 到 很 好 的 系 统 性 能。此 外 调 整 系 统 参 数 设 置 和 合 理 的 物 理 带 宽, 可 以 使PowerBuilder 5.0 的 应 用 运 行 得 十 分 快 捷。

   在PowerBuilder 5.0 中, 系 统 内 部 已 经 在 一 些 功 能 上 进行 了 增 强, 对 这 些 功 能 加 以 利 用, 本 身 就 可 以 实 现 性 能 的优 化。

使 用PowerBuilder 5.0 的Tab 控 件 时, 如 果 在TabPage 的 属 性 中选 中"create on demand" 这 个 复 选 框, 在 运 行 时, 只 有当 用 户 选 择 这 个TabPage,PowerBuilder 才 去 初 始 化 该TabPage 对 象的 实 例。

使 用Data Store 而 不 要 使 用 不 可 视 的Data Window 作 为 数 据 的缓 冲 区。

传 递string、date time 等 数 据 类 型 的 参 数 尽 可 能 使 用read-only 方 式, 因 为 同 采 用reference 方 式 相 比,PowerBuilder 无 需 为 这 些参 数 再 于 内 存 中 复 制 一 份 拷 贝。 同 理,reference 方 式 要 比value 法 传 参 更 快 一 些。

使 用 局 部 变 量 要 比 全 局 和 共 享 变 量 要 快 一 些, 因 为 局部 变 量 存 在 栈 中, 而 全 局 变 量 则 存 储 于 远 堆。 这 个 速 度 的差 异 在 使 用 机 器 代 码 时 比P-Code 更 为 明 显。

使 用 数 组 对Data Window 的 数 据 进 行 赋 值, 而 不 要 使 用SetItem( ) 和GetItem( ) 系 列 的 函 数, 因 为 前 者 只 使 用 了 一 次 函 数, 就调 用 了 所 有 的 行 和 列。

为 加 快 编 译 速 度, 不 要 在 一 个 事 件 或 函 数 中 编 写 过 长的 代 码, 将 它 们 分 成 几 个 函 数 或 其 他 可 重 用 的 代 码 对 象。
调 整 您 的 数 据 库。 一 般 来 说, 数 据 库 访 问 在 客 户/ 服 务器 结 构 的 应 用 中 要 占 用 大 量 的 时 间, 尽 可 能 利 用PowerBuilder 的 特 性 来 减 少 数 据 库 访 问 的 时 间, 包 括:
在5.0 中DBParm 缺 省 设 置StaticBind = 1, 也 就 是 说 在 检 索 数据 之 前,PowerBuilder 并 不 首 先 获 取 查 询 数 据 结 果 集 结 构 的描 述, 这 样 作 可 以 提 高 数 据 的 检 索 速 度, 但 是 如 果 数 据 窗口 同 数 据 库 的 结 果 集 不 匹 配 时, 将 发 生 错 误。 因 此 如 果 您需 要 动 态 改 变 数 据 窗 口 所 查 询 的 表, 而 且 这 些 表 结 构 不同 时, 您 应 当 将StaticBind 的 值 设 置 为0。

DBParm 缺 省 设 置 允 许DataWindow 放 置BLOB 字 段, 使 用Data Pipeline 可 以 对 数 据 库 插 入BLOB 字 段 的 数 据。

通 过DBParm 的 设 置 可 以 使 数 据 库 支 持 游 标。 设 置DBParm SQLCache = n 将 告 诉PowerBuilder 将 为 多 少 个 使 用 不 同SELECT 语 句 的 游 标建 立 缓 冲。 如 果 您 多 次 重 复 使 用 同 一 个SELECT 语 句, 当 缓 冲区 内 有 数 据 时, 检 索 的 速 度 将 大 大 加 快。SQLCache 的 缺 省 值为0。

PowerBuilder 5.0 中 对 数 据 窗 口 有 了 这 样 的 一 个 选 项, 可以 将 数 据 窗 口 的 结 果 集 保 存 在 本 地 磁 盘 上。 这 样 作 可 以减 少 内 存 的 使 用, 使 您 创 建 更 大 的 报 表, 不 过 存 取 速 度 比将 结 果 集 放 在 内 存 中 要 慢 得 多。 如 果 您 的 数 据 窗 口 将 显示 的 不 是 一 个 很 大 的 报 表, 一 般 还 是 将 结 果 集 放 在 内 存中 为 佳。
其 它 的 注 意 事 项
   对 于 用 户 使 用PowerBuilder 编 译 代 码, 还 有 以 下 几 点值 得 说 明:

PowerBuilder 产 生 编 译 代 码 的 速 度 很 慢, 应 尽 可 能 使 用 主频 较 快 的 计 算 机, 最 多 至64M 内 存, 不 过 在5.0 的 版 本 中, 多CPU 对 提 高 编 译 速 度 没 有 任 何 帮 助。

PowerBuilder 所 使 用 的Watcom 的 技 术 主 要 是32 位 的 技 术, 尽管 在32 位 平 台 上 有 生 成16 位 代 码 的 选 项, 但 是 速 度 却 并 不见 佳。 另 外 在16 位 平 台 上, 我 们 不 能 产 生32 位 的 应 用 程 序。

编 译16 位 应 用 程 序 有 一 个 限 制 就 是 代 码 和 数 据 都 不 能超 过64K, 如 果 函 数 或 事 件 中 的 代 码 过 长,PowerBuilder 在 创 建EXE 时 将 产 生 错 误。 我 们 推 荐 的 解 决 办 法 就 是 将 长 代 码 分 解成 多 个 小 函 数, 这 样 做 也 可 以 提 高 运 行 效 率 并 有 利 于 您对 应 用 代 码 的 维 护。

如 果 您 在Windows NT 或Windows 95 上 运 行16 位 应 用 程 序, 您 所使 用 的 运 行 库 也 应 当 是16 位 的。

在 一 个PowerBuilder 应 用 中 我 们 只 能 使 用P-Code 的PBD 或 编 译代 码DLL 中 的 一 种, 而不能 将 其 混 合 使 用, 不 过 唯 一 的 例 外是 使 用PowerBuilder 创 建OLE 服 务 器。

如果您只是想改变一DLL,而并不想重新编译全部的应用,您可以在Library 画笔中选择ibrary|Build Runtime Library... 的菜单项。

在编译时,系统将首先剔除注释语句,所以Script中注释语句的多少对编译速度没有影响。
在您使用PowerBuilder的Plug-In技术时,您不能使用编译代码
...全文
143 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
herrick 2005-04-21
  • 打赏
  • 举报
回复
回复人: malingfeng(飞雪连天) ( ) 信誉:100 2005-04-20 20:18:00 得分: 0


意思是说PB9.0还是16位的喽


*********************************************************

这个不敢乱说,但是就是知道还是有长度的限制。
malingfeng 2005-04-20
  • 打赏
  • 举报
回复
up too
aichangfeng 2005-04-20
  • 打赏
  • 举报
回复
ding
killerdanny 2005-04-20
  • 打赏
  • 举报
回复
够老
pjy998 2005-04-20
  • 打赏
  • 举报
回复
UP
malingfeng 2005-04-20
  • 打赏
  • 举报
回复
初学PB,似懂非懂
malingfeng 2005-04-20
  • 打赏
  • 举报
回复
意思是说PB9.0还是16位的喽
herrick 2005-04-20
  • 打赏
  • 举报
回复
有意思,写这些东西和翻译的人都很牛啊
这些内部的机制,还是挺有用的,
我现在用的是9.0但怀疑有很多东西还是上面写的机制啊!
不信,你在一个函数中写了601行代码,之后保存看看^_^
hygougou 2005-04-20
  • 打赏
  • 举报
回复
古董文章嘛,以前没有OFFICE


大概是用WPS打的,好歹我也排了

好几段文章的版


CoolMask 2005-04-20
  • 打赏
  • 举报
回复
看到眼花
31737951 2005-04-20
  • 打赏
  • 举报
回复
呵呵

397

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧