数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
为下拉式数据窗口建立缓冲区

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

为下拉式数据窗口建立缓冲区


张健姿
01-6-22 下午 04:47:33


同 其 他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 对 象 的 实 例。
· 使 用DataStore 而 不 要 使 用 不 可 视 的DataWindow 作 为 数 据 的 缓 冲 区。
· 传 递string、datetime 等 数 据 类 型 的 参 数尽 可 能 使 用read-only 方 式, 因 为 同 采 用reference 方 式 相 比,PowerBuilder 无 需 为 这 些 参 数 再 于 内 存 中 复 制 一 份 拷 贝。 同 理,reference 方 式 要 比value 法 传 参 更 快 一 些。
· 使 用 局 部 变 量 要 比 全 局 和 共 享 变 量要 快 一 些, 因 为 局 部 变 量 存 在 栈 中, 而 全 局 变 量 则 存储 于 远 堆。 这 个 速 度 的 差 异 在 使 用 机 器 代 码 时 比P-Code 更 为 明 显。
· 使 用 数 组 对DataWindow 的 数 据 进 行 赋值, 而 不 要 使 用SetItem( ) 和GetItem( ) 系 列 的 函 数, 因 为 前 者只 使 用 了 一 次 函 数, 就 调 用 了 所 有 的 行 和 列。
· 为 加 快 编 译 速 度, 不 要 在 一 个 事 件或 函 数 中 编 写 过 长 的 代 码, 将 它 们 分 成 几 个 函 数 或 其他 可 重 用 的 代 码 对 象。
· 调 整 您 的 数 据 库。 一 般 来 说, 数 据库 访 问 在 客 户/ 服 务 器 结 构 的 应 用 中 要 占 用 大 量 的 时间, 尽 可 能 利 用PowerBuilder 的 特 性 来 减 少 数 据 库 访 问 的 时间, 包 括:
1. 在5.0 中DBParm 缺 省 设 置StaticBind = 1, 也 就是 说 在 检 索 数 据 之 前,PowerBuilder 并 不 首 先 获 取 查 询 数 据结 果 集 结 构 的 描 述, 这 样 作 可 以 提 高 数 据 的 检 索 速度, 但 是 如 果 数 据 窗 口 同 数 据 库 的 结 果 集 不 匹 配 时,将 发 生 错 误。 因 此 如 果 您 需 要 动 态 改 变 数 据 窗 口 所 查询 的 表, 而 且 这 些 表 结 构 不 同 时, 您 应 当 将StaticBind 的值 设 置 为0。
2. DBParm 缺 省 设 置 允 许DataWindow 放 置BLOB 字段, 使 用Data Pipeline 可 以 对 数 据 库 插 入BLOB 字 段 的 数 据。
3. 通 过DBParm 的 设 置 可 以 使 数 据 库 支 持游 标。 设 置DBParm SQLCache = n 将 告 诉PowerBuilder 将 为 多 少 个 使 用不 同SELECT 语 句 的 游 标 建 立 缓 冲。 如 果 您 多 次 重 复 使 用同 一 个SELECT 语 句, 当 缓 冲 区 内 有 数 据 时, 检 索 的 速 度将 大 大 加 快。SQLCache 的 缺 省 值 为0。
4. 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 画 笔 中 选 择Library|Build Runtime Library... 的 菜 单 项。
· 在 编 译 时, 系 统 将 首 先 剔 除 注 释 语句, 所 以Script 中 注 释 语 句 的 多 少 对 编 译 速 度 没 有 影响。
· 在 您 使 用PowerBuilder 的Plug-In 技 术 时, 您不 能 使 用 编 译 代 码。



相关文章

相关软件