转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 常用软件 >> 正文
PowerBuilder应用开发系列讲座(12)         

PowerBuilder应用开发系列讲座(12)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:654 更新时间:2009/4/24 21:43:38

  在PowerBuilder 5.0中支持全编译代码,但用于采用这种方法存在编译时间长、编译后可执行文件量大等缺点,所以在不少场合,我们仍采用伪编译方式,就是将装载对象和源代码的PBL文件编译成PowerBuilder的动态链接库(.PBD)。PowerBuilder的动态链接库中装载的是与源程序库中源代码相匹配的二进制表示。在运行时,对象(包括函数)依照"需要时调用"的原则,从.PBD中装入内存,这就使可执行程序的字节数大大缩小,执行效率会提高 ,而且由于只有那些要用到的对象才被即时装入内存,使系统需要进行内存交换的机会就少得多,因而应用的运行也就更快。但有时我们也会发现用户在进行打开窗口等操作时系统的响应速度较慢,特别是在客户机的配置较低的情况下,这种情形尤为突出。我们知道,当程序调用一个新的对象时,系统要到各个.PBD文件中查找这个对象,如果这个对象是由其它对象继承而来,那么其所有的祖先对象都需要装入内存。如应用软件十分庞大,这种查找和装入显然是十分消耗时间的。

  这里我们介绍一种预装入对象的办法,可以在一定程度上解决这个问题。预装入对象就是 改变对象初始装入的时间,也就是说在用户对应用并没有反应速度的要求时装入了对象, 而不是在用户需要该对象时才装入(如打开一个窗口时)。预装入对象可以明显地提高性 能,这种技术给用户的印象是在用户真正要求系统的响应速度时所有对象的装入都加快了 。最适合做这些预装入的地方是在APPLICATION的OPEN事件中。在PowerBuilder 5.0开发 工具中并没有直接提供这样的功能,但我们可以用一些简单的技巧来实现它,这就是使用 一个非可视化对象。

  我们首先应当知道:一些对象,如非可视化对象等,被调用时全部装入内存,而另一些对象 ,如函数,只装入需要的部分。因此使用一个非可视化对象可能比使用一个全局函数更快 ,当然还与它的大小和功能有关。您不必在应用的OPEN事件中预装入所有的对象,而是预装入那些最经常被用作为祖先的对象。具体的做法是将这个非可视化对象定义成一个变量。这个非可视化对象一直保留在内存中直到应用结束,这可使应用更加紧凑。这样做的另一个好处是,一旦您定义了一个对象的指针作为全局变量,就可以在软件的任何地方利用这个指针,引用这个对象的常量、函数和其它的特性。具体的步骤可以这样进行:

  步骤一:创建一个预装入的对象创建一个Non_Visual_Object类型的用户对象

  将该对象以您选定的名字存盘。在本例中 用NVO_Object_Pre_Loader. 在该对象中,建立一个Powerobject的对象数组叫做IPO_Pre_Loaded_objects[]。Powero bject对象是PowerBuilder对象层次中最高层次的对象(见前文《PowerBuilder面向对象 的程序设计》),因此它能被分配给任何一个PowerBuilder标准的或自定义对象。另外建 立一个整型的变量做为数组的索引,我们叫它为ii_Idx,并且将它初始化为0。这两个变量均为实例变量。 PRIVATE:/*限制对这两个变量的访问权限*/ /*我们假设预装入的对象数最多不超过10,当然开发者也可根据实际情况调整*/ PowerObject IPO_Pre_Loaded_objects[10] Integer ii_Idx=0 注意,我们应当在这里就预先定义数组的大小,这样可以使这个对象预先保留内存而且在 自身预装入时也能运行得更快。

  步骤二:创建预装入函数 现在创建一个用户对象函数叫做NVOF_Pre_Load_Object。

  这个函数有一个参数:APO_Obj ect,它也是Powerobject类型。函数的代码如下。
   /* 函数:NVOF_Pre_Load_Object
  功能:To pre_load often used ancestor objects
  参数:Power Object APO_Object
  返回值:integer 1:成功,-1: 失败 */
  ii_Idx++ /*将要预装入的对象赋值给这个数组*/
  IPO_Pre_Loaded_Objects[ii_Idx]=APO_Object /*检验赋值是否成功*/

  If isvalid(IPO_Pre_Loaded_objects[ii_Idx]) then
    Return 1
  else
    Return -1
  end if

  步骤三:创建可以放入调用用户对象代码的用户事件

  在这个对象上为开发者建立一个可放入对预装入对象调用的代码。我们定义了使用一个"声明"的事件,该事件将在对象的CONSTRUCTOR事件中被触发。我们可以将这个用户事件命名为NVO_UE_DECLARATIONS,并且将下面的代码放入对象的CONSTRUCTOR事件中。

  This.Post Event("nvo_ue_declarations")

  在NVO_UE_DECLARATION事件中您可以放入对预装入对象的调用。

  步骤四:预装入对象这段代码存在NVO_UE_DECLARATION事件中。

  可能您的应用需要更多或更少的预装入对象 ,我们只假设有这样几个常用的祖先对象类w_WindowBase、udw_DataWindow、uo_UserOb jectBase和m_MenuBase。这些对象分别代表我们的窗口类、用户对象数据窗口类、用户 对象类和菜单类的祖先对象。 NVO_UE_DECLARATON事件中的代码如下:

  /*声明指向这些对象的局部变量*/
  Window lWindow UserObject lUO DataWindow lDW Menu lMenu
  /*对每一个需要预装入的对象,使用Create语句创建一个该对象的实例,并调用预装入函
  数将这个实例保存在内存中*/ /*创建一个窗口基类的实例*/
  lWindow=Create w_WindowsBase NVOF_Pre_Load_Object(lWindow)
  /*创建一个DataW-indow的用户对象基类的实例*/
  lDW=Create udw_DataWindowBase NVOF_Pre_Load_object(lDW) /*创建一个用户对象的基类实例*/
  lUO=uo_UserObjectBase NVOF_Pre_Load_Object(lUO) /*创建一个菜单实例*/
  lMenu=Create m_MenuBase NVOF_Pre_Load_Object(lMenu)

  一般来讲,动态调用的对象,都是那些用字符串变量调用的对象,将不包含在.EXE文件中。 例如,如果您用Open(mywin,"My_Window")打开了一个窗口,My_Window窗口并不自动地包 含在您的EXE文件中。如果编译成.PBD文件,则会包含在.PBD当中。但是如果您用这种方 法预装入这个对象,该窗口在.PBD和.EXE编译技术下都将被包含。

  步骤五:初始化预装入对象 为了使对象进入内存,还剩下最后的一步。

  我们必须将预装入对象本身装入内存。您可以 选择在应用频繁使用部分开始工作前的任何地方做这件事。一般常用的是在APPLICA-TI ON的OPEN事件中。需要的代码如下:

  anvo_object_pre_loader=Create NVO_Object_Pre_loader.

  这段程序将建立这个非可视化对象,该可视化对象就会激发对象的声明事件,从而预装入各个对象。

  最后一点需提请注意的是,不要忘记在您的APPLI-CATION的CLOSE事件中加上DESTROY an vo_object_pre_loader这样一条语句,否则这个应用将造成所谓的内存漏洞(Memory Leak)。


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台