




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
窗体顶端以下内容含脚本,或可能导致页面不正常的代码说明:上面显示的是代码内容。您可以先检查过代码没问题,或修改之后再运行.窗体底端2003-02-21 19:12:07窗体顶端以下内容含脚本,或可能导致页面不正常的代码说明:上面显示的是代码内容。您可以先检查过代码没问题,或修改之后再运行.窗体底端第三十二讲:为下拉式数据窗口建立缓冲区 -为下拉式数据窗口建立缓冲区 在 上 两 期 文 章 中, 我 们 提 到 了 在Master/Detail 风 格 的数 据 窗 口 中 使 用ShareData() 函 数, 可 以 保 持 两 个 数 据 窗 口 中数 据 的 一 致 性。 其 实 这 个 函 数 还 有 着 其 他 很 多 不 同 的 用途。 这 里 我 们 就 另 举 一 例。 许 多 最 终 用 户 在 使 用PowerBuilder 应 用 程 序 时 抱 怨 运行 速 度 太 慢。 一 般 来 讲, 一 个 企 业 级 的 客 户/ 服 务 器 应 用程 序 执 行 速 度 的 瓶 颈 并 不 在 于 代 码 执 行 的 效 率, 而 在 于应 用 向 后 台 数 据 库 查 询 数 据 时 等 待 后 台 响 应 的 时 间。 改进 应 用 软 件 速 度 的 关 键 在 于 减 少 应 用 向 后 台 数 据 库 查 询的 数 据 量, 减 少 网 络 的 数 据 流 量, 其 中 减 少 下 拉 式 数 据 窗口 的 查 询 量 就 是 一 个 有 效 的 方 法。 一 般 的, 为 了 用 户 输 入 方 便 和 避 免 废 键, 在 数 据窗 口 某 些 数 据 列 使 用 下 拉 式 数 据 窗 口 是 程 序 员 经 常 采 用的 方 法。 运 行 一 个 应 用, 某 一 段 时 间 所 处 理 一 般 都 是 相 同或 相 近 的 事 务, 这 样 同 时 打 开 的 不 同 窗 口 和 数 据 窗 口 却很 可 能 同 时 采 用 相 同 的 下 拉 式 数 据 窗 口。 在 显 示 这 些 窗口 前, 当 系 统 执 行 主 数 据 窗 口 的Retrieve() 命 令 时, 总 是 要首 先 到 数 据 库 中 查 询 这 些 下 拉 式 数 据 窗 口 的 数 据。 如 果我 们 能 够 减 少 这 些 查 询, 进 而 减 少 网 络 流 量, 和 后 台 数 据库 服 务 器 进 行 语 法 分 析, 设 计 查 询 算 法 和 执 行 查 询 的 时间, 这 将 能 使 应 用 的 性 能 有 较 大 的 提 高。 这 里 我 们 采 用 的方 法 是 在 客 户 端 建 立 一 个 保 存 结 果 集 的 缓 冲 区, 并 使 用ShareData 函 数 使 缓 冲 区 的 数 据 同 下 拉 式 数 据 窗 口 的 主 缓 冲 区 建 立共 享。 我 们 将 这 个 数 据 缓 冲 区 建 立 在 一 个 不 可 视 的 窗 口上, 在 这 个 窗 口 为 每 一 个 不 同 的 结 果 集 创 建 一 个 不 同 的用 户 对 象。 首 先 我 们 创 建 一 个 标 准 的 不 可 视 的 用 户 对 象,在 可 选 的 对 象 类 型 中 选 择DataStore, 我 们 并 不 需 要 为 这 个用 户 对 象 编 写 任 何 代 码, 只 要 将 其 保 存 为u_dsa 即 可。 我 们 创 建 一 个 窗 口w_resultset_server 作 为 结 果 集 服 务器, 在 这 个 不 可 视 的 窗 口 中 声 明 这 样 一 些 实 例 变 量: / 缓 冲 区 大 小 PROTECTED integer ii_cache_size / 缓 冲 区 PROTECTED u_dsa ids_cache / 我 们 用 以 检 索 结 果 集 的 事 务 对 象 PROTECTED transaction i_trans / 更 新 结 果 集 的 时 间( 设 为30 秒) PROTECTED long il_refresh_interval = 1800 / 更 新 的 起 始 时 刻 PROTECTED time itm_last_refresh 使 用dddw 的 窗 口 将 通 过fw_share_dddw() 函 数 来 访 问w_resultset_server 窗 口, 这 个 函 数 将 接 受 一 个 数 据 窗 口 和 一 个 列 名 作 为 参数。 /public function integer fw_share_dddw / 参 数: DataWindow adw_parent/ string as_column_name 表 现 形 式 为dddw 列 名integer li_cache_idxDataWindowchild dwcstring ls_dataobject_name/dddw 所 使 用dataobject 的 名 称ls_dataobject_name = adw_parent.Describe( as_column_name + “.” )IF ls_dataobject_name = “”THEN RETURN 0/ 该dataobject 是 否 存 在 缓 冲 区 中li_cache_idx = fw_find_dataobject (ls_dataobject_name)IF li_cache_idx 1 THEN RETURN 0/ 同 子 数 据 窗 口 共 享 数 据adw_parent.GetChild ( as_column_name, dwc )RETURN ids_cacheli_cache_idx.ShareData (dwc) 在 这 个 函 数 中, 为 确 定 下 拉 式 数 据 窗 口 所 使 用 的数 据 窗 口 的 名 称, 首 先 使 用 了Describe() 函 数 来 获 得 该 列 的 属 性。 如 果 该 列 名 没 有 找 到, 或 该 列 的 表 现 形 式 不 是 下 拉式 数 据 窗 口, 这 个 函 数 的 返 回 值 为“”; 接 下 来 调 用fw_find_dataobject() 函 数, 以 确 定 这 个 数 据 结 果 集 是 否 在 缓 冲 区 中, 如 不 存 在,就 新 创 建 一 个; 最 后 使 用ShareDate() 函 数 将 缓 冲 区 中 结 果 集同 下 拉 式 数 据 窗 口 共 享 数 据。 这 个 函 数 中 调 用 的fw_find_dataobject() 函 数 如 下, 它接 受 一 个as_dataobject 参 数, 并 使 用DO.WHILE 循 环 在 缓 冲 区 中查 找 该 对 象 的 结 果 集, 如 找 到 将lb_found 设 为True, 否 则 设 为False。 /protected function integer fw_find_dataobject / 参 数: string as_dataobjectinteger li_cache_idx = 1boolean lb_found = FALSEu_dsa lds_new_entry/ 定 位dataobject 所 在 的 缓 冲 区DO WHILE (NOT lb_found) and (li_cache_idx = ii_cache_size)IF ids_cacheli_cache_idx.dataobject = as_dataobject THENlb_found = TRUEELSEli_cache_idx +END IFLOOP/ 如 果 该dataobject 不 存 在 与 缓 冲 区 中, 则 创 建 一 个 新 入 口IF NOT lb_found THENIF OpenUserObject (lds_new_entry) 1 THEN RETURN 0END IFlds_new_entry.dataobject = as_dataobjectIF lds_new_entry.SetTransObject (i_trans) 1 THENRETURN 0END IFIF lds_new_entry.Retrieve () 0 THENRETURN 0END IFii_cache_size +ids_cacheii_cache_size = lds_new_entryli_cache_idx = ii_cache_sizeEND IFRETURN li_cache_idx 如 果 该 数 据 对 象 不 存 在 于 缓 冲 区 中, 我 们 将 使 用OpenUserObject() 函 数 新 创 建 一 个 用 户 对 象, 并 将 这 个DataStore 的DataObject 属性 赋 值 为as_dataobject, 然 后 调 用SetTransObject() 函 数 和Retrieve() 函 数 查 询 结 果。 在 这 个 隐 含 窗 口 的Open 事 件 中 键 入 下 列 代 码:i_trans = sqlcaitm_last_refresh = Now ()/ 设 置 起 始 时 间Timer ( 60 ) 在 窗 口 函 数fw_find_dataobject() 中 调 用SetTransObject() 时使 用 的 事 务 变 量 是i_trans, 这 样 做 的 目 的 是 为 了 软 件 更 为通 用。 我 们 在Open 事 件 中 将 这 个 实 例 变 量 赋 值 为SQLCA, 您 也可 以 根 据 需 要 给 予 不 同 的 赋 值。 我 们 使 用 了 一 个 实 例 变量itm_last_refresh 作 为 计 时 器, 并 且 设 定 每 一 分 钟 中 断 一 次,以 使 窗 口 根 据 不 同 的 需 要 更 新 缓 冲 区 中 的 数 据。 下 面 的 一 个 窗 口 函 数fw_refresh_all 用 以 更 新 缓 冲 区数 据:/public subroutine fw_refresh_all ()integer li_cache_idx/ 更 新 所 以 缓 冲 区FOR li_cache_idx = 1 TO ii_cache_sizeids_cacheli_cache_idx.Retrieve ()NEXT/ 重 新 设 置 更 新 缓 冲 区 的 时 间i_tm_last_refresh = Now () 我 们 在w_resultset_server 的Open 事 件 中 对 一 个 计 时 器进 行 了 初 始 化, 同 时 还 初 始 化 了 一 个 计 时 变 量itm_last_refresh,我 们 剩 下 的 工 作 就 是 在Timer 事 件 中, 编 写 代 码 根 据 设 定 的时 间 来 调 用fw_refresh_all()。time ltm_current_timeinteger li_cache_idx/ 当 前 时 间current_time = Now ()/ 考 虑 过 午 夜 的 特 殊 情 况IF ltm_current_time itm_last_refresh THENfw_refresh_all ()/ 检 测 已 过 的 时 间 间 隔ELSEIF RelativeTime ( itm_last_refresh, ii_refresh_interval )= ltm_current_time THENfw_refresh_all ()END IF 一 般 在 一 个 大 型 应 用 中, 这 个 对 象 中 往 往 要 有 几十 个 结 果 集。 您 可 能 并 不 希 望 系 统 同 时 更 新 所 有 的 数 据,您 可 以 修 改Timer 事 件 中 的 代 码, 使 系 统 根 据 一 定 的 算 法,轮 流 更 新 缓 冲 区 中 的 数 据, 而 不 使 用 户 感 觉 到 延 迟。 值 得指 出 的 是, 在 一 般 的 数 据 窗 口 中 的dddw, 除 了 在 创 建 时 系统 会 自 动 对 该 数 据 窗 口 中 的 所 有dddw 进 行Retrieve() 以 外, 在运 行 过 程 中 如 果 没 有 程 序 明 确 指 明 某 个dddw 执 行Retrieve() 函 数, 系 统 是 不 会 自 动 更 新 其 数 据 的。 因 此 采 用 本 文 推 荐的 方 法 还 可 以 保 持 下 拉 式 数 据 窗 口 中 的 数 据 接 近 后 台 服务 器 中 的 最 新 数 据。 如 果 您 在 应 用 中 必 须 使 下 拉 式 数 据窗 口 中 的 数 据 为 后 台 的 最 新 数 据, 也 可 以 调 用wf_refresh_resultset() 强 制 缓 冲 区 更 新 数 据, 使 用 的 参 数 有 两 个, 数 据 窗 口 名 称和 列 名:/public function boolean fw_refresh_resultset()/ 参 数: DataWindow adw_parent/ string as_column_name 数 据 窗 口 中 为dddw 的 列 名integer li_cache_idxstring ls_dataobject_name/dddw 所 使 用dataobject 的 名 称ls_dataobject_name = adw_parent.Describe( as_column_name + “.” )IF ls_dataobject_name = “”THEN RETURN False/ 该dataobject 是 否 存 在 缓 冲 区 中li_cache_idx = fw_find_dataobject (ls_dataobject_name)IF li_cache_idx 1 THEN RETURN False/ 更 新 缓 冲 区 内 的 数 据ids_cacheli_cache_idx.Retrieve()RETURN True 在 这 段 代 码 中, 我 们 首 先 使 用fw_find_dataobject 函 数找 到 要 更 新 数 据 的dddw 所 使 用 的 缓 冲 区, 然 后 更 新 该 缓 冲区 的 数 据 即 可。2003-02-21 19:13:06wwm头衔:真的敌人等级:版主文章:3405积分:7864门派:无门无派注册:2002年9月11日第 34 楼 第三十三讲:为下拉式数据窗口建立缓冲区(续) -为下拉式数据窗口建立缓冲区(续) 同 其 他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 的 特 性 来 减 少 数 据 库 访 问 的 时 间, 包 括: 在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 画 笔 中 选 择Library|Build Runtime Library. 的 菜 单 项。 在 编 译 时, 系 统 将 首 先 剔 除 注 释 语 句, 所 以Script 中 注释 语 句 的 多 少 对 编 译 速 度 没 有 影 响。 在 您 使 用PowerBuilder 的Plug-In 技 术 时, 您 不 能 使 用 编 译 代码。2003-02-21 19:13:33wwm头衔:真的敌人等级:版主文章:3405积分:7864门派:无门无派注册:2002年9月11日第 35 楼 第三十四讲:布式事务处理 -分布式事务处理 美 国Sybase 公 司 于 今 年 七 月 发 布 了PowerBuilder 6.0 的Beta 版, 正 式 的 版 本 也 将 于 不 久 的 将 来 推 出, 其 中 对 分 布 式 事务 处 理 的 支 持 是 新 版 本 中 增 强 得 最 多 的 功 能。 早 在1995 年,PowerSoft 公 司 就 提 出 了 在“ 分 布 式 事 务” 方 面 的 发 展 战 略, 并 在1996 年 发 布 的PowerBuilder 5.0 中 支 持 了 分 布 式 事 务 处 理 的 功 能,笔 者 在 以 前 的 讲 座 中 也 曾 经 讨 论 过 有 关 如 何 创 建 分 布 式PowerBuilder 应 用 的 问 题, 但 是 得 到 读 者 反 馈 意 见 却 很 少。 以 往, 一 个使 用PowerBuilder 开 发 客 户/ 服 务 器 应 用 软 件 的 程 序 员 是 较 少会 想 到 使 用 分 布 式 事 务 来 分 割 应 用 的, 因 此 一 般 的 用 户对 分 布 式 事 务 的 概 念 和 意 义 也 不 甚 了 解, 这 里 我 们 来 进一 步 讨 论 一 下 分 布 式 事 务 处 理 及 其 应 用。 三 级 体 系 结 构 首 先 我 们 介 绍 三 级 体 系 结 构 这 一 概 念。 所 谓 级是 指 一 种 功 能 划 分, 我 们 以 往 所 开 发 的 数 据 库 应 用 软 件一 般 是 基 于 客 户/ 服 务 器 结 构 的, 我 们 称 之 为 两 级 体 系 结构。 也 就 是 说 整 个 系 统 可 以 分 成 两 个 功 能 块, 第 一 级 包 括了 软 件 的 应 用 层 和 表 现 层, 驻 留 于 客 户 端。 我 们 使 用PowerBuilder 开 发 出 的 应 用 主 要 用 于 第 一 级, 运 行 于 客 户 端。 第 二 级 包含 数 据 库 和 服 务 器 的 组 件。 一 个 基 于SQL 的 数 据 库 管 理 系统 一 般 安 装 在 服 务 器 端, 应 用 软 件 在 服 务 器 端 进 行 的 操作 主 要 是 数 据 存 储 和 检 索。 在 两 级 模 式 中 会 有 一 些 应 用逻 辑 以 存 储 过 程 和 触 发 器 的 形 式 存 储 在 服 务 器 端, 以 优化 服 务 器 的 性 能, 但 绝 大 多 数 的 应 用 逻 辑 是 放 在 客 户 端的。 三 级 模 式 是 将 系 统 分 为 有 三 个 不 同 的“ 级”: 表现 级, 商 业 逻 辑 级 和 数 据 访 问 级。 表 现 级 是 处 理 用 户 界 面的 功 能; 数 据 访 问 级 是 数 据 源, 在 通 常 状 况 下 指 数 据 库;商 业 逻 辑 级 是 新 增 加 的 一 级, 指 程 序 中 作 出 智 能 决 策 的那 一 部 分 功 能。 在 早 期 的 应 用 中, 这 一 部 分 的 功 能 并 不 十分 复 杂, 一 般 将 其 放 在 表 现 级 即 可, 另 有 少 量 以 存 储 过 程或 触 发 器 的 形 式 放 在 数 据 访 问 一 级, 而 随 着 软 件 工 程 的发 展, 软 件 的 日 益 复 杂, 软 件 中 功 能 增 加 最 多 的 就 是 在 这一 级。 一 个MIS 系 统 的 功 能 由 早 先 的 对 某 一 个 表 的 简 单 查询, 发 展 到 涉 及 多 个 表 的 分 类 统 计 求 和, 根 据 复 杂 的 公 式分 析 计 算, 进 行 决 策 支 持 等, 如 将 这 些 增 强 的 功 能 仍 全 部放 置 在 表 现 级, 会 使 得 客 户 机 越 来 越 不 堪 重 负, 因 此 就 有人 提 出 在 系 统 中 将 商 业 逻 辑 分 离 出 来, 单 独 形 成 了 一 级,这 就 形 成 了 三 级 结 构。 随 着 三 级 结 构 的 进 一 步 发 展, 一 般总 是 把 运 行 在 商 业 逻 辑 级 的 软 件 编 写 成 为 了 一 个 为 客 户机 所 调 用, 能 够 完 成 一 定 的 逻 辑 功 能 的 专 用 软 件, 同 数 据库 服 务 器 相 区 别, 我 们 称 之 为 应 用 服 务 器。 在 一 个 网 络 中,可 以 有 着 多 个 不 同 功 能 的 应 用 服 务 器, 为 客 户 机 或 其 它的 应 用 服 务 器 提 供 专 业 服 务, 这 样, 三 级 结 构 就 发 展 成 为了N 级, 这 就 是 所 谓 的 分 布 式 计 算 方 式。 分 布 式 计 算 的 优 势: 采 用 分 布 式 计 算 有 着 多 方 面 的 技 术 优 势, 包 括: 逻 辑 封 装 性: 这 是 分 布 式 模 式 中 最 具 诱 惑 力 的特 征, 这 种 模 式 的 根 基 在 于 将 以 往 全 部 由 客 户 机 完 成 的事 务 逻 辑 中 的 一 部 分 从 客 户 端 分 开。 当 使 公 司 需 要 动 态改 变 一 个 应 用 软 件 的 商 业 逻 辑 规 则 时, 只 要 改 变 一 个 应用 服 务 器 的 程 序 即 可, 而 不 需 要 更 改 客 户 端 用 户 界 面, 这样 就 无 需 中 断 用 户, 为 最 终 用 户 重 新 发 放 新 的 界 面 软 件或 亲 自 上 门 为 其 安 装 调 试 并 重 新 培 训 用 户, 提 高 了 工 作效 率。 这 种 多 级 模 式 对 于 需 经 常、 快 速 改 变 应 用 程 序 的 行业 很 有 帮 助。 瘦 客 户 机: 这 种 类 型 的 应 用 在 运 行 时 最 显 著的 特 点 就 是 减 少 甚 至 消 除 了 传 统 的 两 级 体 系 结 构 中, 以客 户 机 为 中 心 或 称 为“ 肥 客 户” 的 模 式, 减 轻 了 客 户 机 的功 能 负 担, 使 其 消 肿 成 为 了“ 瘦 客 户”。“ 肥 客 户” 是 用 户感 到 十 分 苦 恼 的 事 情, 用 户 为 使 用 更 强 功 能 的 软 件, 就 必须 付 出 高 昂 的 维 护 费 用, 不 断 地 为 个 人 电 脑 的 软 硬 件 设备 升 级。 近 日 流 行 的NC 也 正 是 看 到 一 般 用 户 在 维 护PC 机 运行 时 负 担 过 重, 而 提 出 通 过 网 络 将 一 部 分 的 任 务 交 给 了服 务 器 完 成。 这 两 种 方 法 有 着 相 通 之 处。 性 能: 性 能 的 提 高 是 三 级 模 式 最 终 被 用 户 采 用的 主 要 原 因。 将 复 杂 的 应 用 和 商 业 逻 辑 分 离 出 来 由 专 门的 一 台 应 用 服 务 器 来 处 理, 既 可 以 提 高 应 用 的 执 行 速 度,也 可 以 减 少 网 络 调 用 的 通 讯 量。 不 过 这 种 性 能 提 高 是 有一 定 代 价 的。 这 就 是 开 发 时 要 将 应 用 逻 辑 分 割 为 客 户 端逻 辑 和 服 务 器 端 逻 辑, 这 就 增 加 了 设 计 的 复 杂 性。 安 全 性 管 理: 在 分 布 式 计 算 模 式 中, 由 于 所 有 的商 业 逻 辑 都 驻 留 在 服 务 器 端, 信 息 管 理 部 门 就 可 以 十 分方 便 地 监 控 服 务 器 的 运 行 情 况, 很 容 易 地 控 制 访 问 服 务器 以 及 与 服 务 器 应 用 打 交 道 人 员 的 数 量。 这 可 以 大 大 简化 管 理 员 对 系 统 的 管 理, 减 轻 系 统 维 护 的 工 作 量, 并 确 保系 统 的 可 靠 运 行。 分 布 式 事 务 处 理 最 广 泛 和 最 成 功 的 应 用 当 数Internet/Intranet 技 术 了, 尽 管 许 多 人 并 不 意 识 到Internet 就 是 一 个 三 级 体 系结 构 的 代 表。 随 着Internet/Intranet 使 用 的 不 断 深 化, 用 户 对Web 服 务 器 所 查 询 的 信 息 就 不 只 局 限 于 以 文 件 方 式 存 放 在 服务 器 端 的 静 态 的 超 文 本 文 件 了。 这 时 我 们 需 要 借 助 关 系型 数 据 库 来 存 放 变 化 的 数 据, 并 在Web 服 务 器 与 数 据 库 服务 器 之 间 以JDBC、CGI 等 协 议 建 立 起 两 者 的 连 接, 使Web 服 务器 能 够 实 现 对 数 据 库 的 即 席 查 询, 并 将 结 果 返 回 浏 览 器。我 们 可 以 发 现, 在 这 样 一 个Intranet 结 构 中, 浏 览 器-Web 服务 器- 数 据 库 服 务 器 就 分 别 对 应 于 客 户 端- 应 用 服 务 器- 数 据 库 服 务 器 三 级 体 系 结 构 中 的 三 个 环 节,Intranet 就 是 一个 典 型 的 三 级 体 系 结 构 的 应 用。 因 此, 我 们 可 以 认 为,Internet 模 式 的 技 术 优 势 如 用 户 界 面 简 单, 管 理 人 员 易 于 维 护 等也 正 是 多 级 计 算 方 式 的 优 势 所 在。 此 外, 由 于PowerBuilder 支持 分 布 式 事 务 处 理, 这 就 使 得PowerBuilder 很 容 易 地 支 持 了作 为 分 布 式 事 务 的 特 例-Internet 的 开 发 了。 分 布 式 应 用 的 开 发 尽 管 分 布 式 计 算 是 一 个 较 新 的 概 念, 但 是 使 用PowerBuilder 开 发 分 布 式 应 用 却 十 分 简 单, 只 要 您 会 使 用PowerBuilder 中的 用 户 自 定 义 的 不 可 视 对 象, 您 就 会 很 快 地 掌 握 分 布 式PowerBuilder 的 开 发。 在PowerBuilder 中, 应 用 服 务 器 一 端 的 功 能 都 是 通 过不 可 视 用 户 对 象 实 现 的, 开 发 人 员 可 以 将PowerBuilder 的 自定 义 用 户 的 对 象 放 于 应 用 服 务 器 一 侧, 被 称 作 远 端 对 象,在 客 户 端 放 置 该 用 户 对 象 的 代 理 对 象。 此 外, 在 服 务 器 一侧 有 一 个 新 的transport 对 象 用 于 监 听 任 何 一 个 用 户 或 其 它应 用 服 务 器 的 请 求, 在 客 户 端 有 一 个connection 对 象 用 以 建立 同 远 端 对 象 的 连 接。 客 户 端 的 应 用 程 序 通 过connection 对象 连 接 应 用 服 务 器, 连 接 建 立 后, 客 户 端 的 应 用 就 可 以 象调 用 本 地 对 象 一 样 调 用 应 用 服 务 器 上 的 对 象 函 数 了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神奇的大树250字14篇
- 我学会了责任400字11篇
- 早餐专业知识培训班课件
- 爱看书的女孩200字9篇
- 叫我第一名观后感650字(13篇)
- 早期孕妇保健知识培训课件
- 早教老师礼仪知识培训课件
- 纪念白求恩app课件
- 假如我是一条蚯蚓作文800字(11篇)
- 纪念抗美援朝课件
- 国网公司合规管理
- 上海宝冶合同范例
- 区块链在房地产交易中的应用-全面剖析
- 2025年湘教版七年级生物下册阶段测试试卷含答案
- 浙江省金华十校 2024 年 11 月高三模拟考试 英语试题卷英语试卷(含解析)
- 《糖尿病视网膜病变》课件
- 网络规划设计师知识点总结
- 《公司法完整版》课件2024
- 泡沫灭火系统维护保养方案
- 《光伏产业链介绍》课件
- 部编五年级上册语文教案全册表格版
评论
0/150
提交评论