中间层如何设定才能使用到Midas中对象池Object Pooling?
组件对象如何释放才能放到对象池Object Pooling中?
客户端用的Dcomconnection时,Dcomconnection.connected:=false时相当于什么?会释放组件吗?组件中所有方法必须带上SetComplete\SetAbort吗?不带的话如何释放?如何放到对象中?如果用对象池的话是不是线程模式不能设为Single-Thread Apartment(STA单线程模式)?如果用其它的线程模式则有同步的问题,如何解决?-------------------------------------------------------
以上只是我刚刚学习三层的一点疑惑,请各位大虾多多跟贴,讲讲你们用Object Pooling的一些心得.分不够分可以再加,我的分多得是.Up就不必了.
版主:你看能不能帮忙挂到前面去?
________________________________________________

解决方案 »

  1.   

    Object Pooling主要是因为,系统每次申请创建一个现成,创建一个数据库连接需要消耗大量的时间。用Pooling,就是事先创建了一堆对象,然后将这些对象扔到一个Pool中,一旦有请求,从Pool中获得对象,而不是重新创建。而用完对象后,不是释放,而是将对象重新扔回Pool中。
    这个好处是节省时间,节省资源。
    SetComplete和SetAbort是MTS中的概念与Pool无关。
    对Pool的认识,我就这些了,献丑了。
      

  2.   

    object pooling是多层应用系统中语言开发厂商提供的实现应用服务器时的一种机制,使用这种机制可以提高应用服务程序的效率.
    像你上面问的这些问题,在设计应用系统时是基本不需考虑的,你只需要在使用创建向导时选择相应的机制便可以了.当然选择不同的机制,在程序编写中也需要注意有些不同.比如使用多线程时,应注意操作文件或数据库需要同步操作,否则会出错.
    另外setcomplete与setabort是事务机制相关的语句,如果你采用了组件的事务机制,在程序你又显式的启动事务,则需要以上语句,如果没有,则不需要了.
      

  3.   

    组件创建的时候怎样设置才能让组件释放的时候自动放入object pooling?好象默认的是没有用到object pooling的.
    客户端Dcomconnection.connected:=false相当于释放组件吗?
      

  4.   

    DCOMConnection.Connected := False;的确是一种释放,便它的意思是放到池子里边,也就是说自己向Session管理说明它不占用了,不仅仅如此,如果它长时间没有进行操作时,会自动的交会池子管理的,根据你的OutTime而定;
    只有大版主才可以挂贴子的;呵呵;升级成功;
    ==================================================如果您觉的您对Delphi感兴趣或是很想学的更好些或者是对Delphi有更深的认识,我们可以一起交流;
    呵呵
    www.nxit.net/bbs  or www.nxrs.net/bbs 
    谢谢,别抛砖
      

  5.   

    DCOMConnection.Connected := False;的确是一种释放,便它的意思是放到池子里边,也就是说自己向Session管理说明它不占用了,不仅仅如此,如果它长时间没有进行操作时,会自动的交会池子管理的,根据你的OutTime而定;
    只有大版主才可以挂贴子的;呵呵;升级成功;
    ==================================================如果您觉的您对Delphi感兴趣或是很想学的更好些或者是对Delphi有更深的认识,我们可以一起交流;
    呵呵
    www.nxit.net/bbs  or www.nxrs.net/bbs 
    谢谢,别抛砖
      

  6.   

    http://www.umlchina.com/jof/jof10/pool8.htm
      

  7.   

    提高分布式多层系统的效率之二(Pooler)
    小小原创 
    提高分布式多层系统的效率是一个永远不变的主题,有很多制约分布式系统的效率,如:RDBMS、数据库引擎、代码效率、各种Pooling、开发设计等……在此,我就Pooler说一说,希望对大家有用;
    有那些Pooler?Pooler是什么?那儿可以用Pooler?Pooler有什么用?怎么用Pooler?当一系例的Pooler问题摆在你的面前时,你如何下手?从那儿下手?但这些又是我们不得不面对的待解决的问题;唯一的办法只能是理解、解决它些问题;
    Pooler是池子的意思,可以这样理解,无论是那种Pooler,它都为用户提供了一个相当于容器的作用的连接,比如一个用户可能需要连接远程数据库中特定的表,当他花费了一定时间进行连接、使用完毕之后,他是要释放这个连接呢?还是将这个连接放在某一个容器里边呢?不可否认,在多层中,连接操作是一个费时操作,特别是对于大型数据库,要进行各种检查等操作,那么,是不是每一个用户都需要这个步骤呢?这儿就提到了Pooler这个概念;当用户A将操作都执行完毕之后,他如果释放了他的连接,那么这个连接就只是被用户A一个人用过,其它用户没有机会再次用这个连接,还要继续进行连接操作,继续的浪费时间;而如果用户A能将这个连
    接保存下来,供以后可以用的着这个连接的用户使用的话,岂不是很好吗?此是Pooler就充当了这个角色,所以,我们可以将Pooler在这儿理解成存放连接的池子或容器;Pooler又可以分为那些?分类所然没有被完全的规格化,但是可以将它罗列出来对我们有用的一些,比如: Session Pooling,Object Pooling,Connection Pooling(前边我们说过),ResourcePooling,DataPooling等,每种不同的Pooling有不同的作用,但它们实现的功能大至相同,它们可以提供方便的连接以节省用户时间,而且可以用我们曾说过的COM or DCOM的TimeOut来判断用户是否超时等;只要有三层的地方,都应该用Pooling,甚至在C/S里也提倡用Pooling,Connection Pooling就是最好的例子;当然,需要合理的应用Pooling,不然会造成接口混乱等现象;
    Pooler 有什么作用?在说什么是Pooler时,我们已经可以感觉的出来它的作用了;那么如何用Pooler呢?提到如何用Pooler时,我想大家如果有时间应该看一看我关边的关于COM DCOM方面的介绍,因为用Pooler 或者叫pooling就必须要用到接口,而前边我曾对接口给过很详细的说明,如果你不能理解接口的话,你在这儿也将无存下手;用Pooling提高分布式系统的效率的确是一个直接的办法,特别是当用户增加时;不管是MTS or DCOM or CORBA都需要用到Pooling技术来使效率提高,我将实现原理介绍一下,后边我会对一个例子进行分析以便于我们更好的交流;一般而言,用Pooling都需要用到协调接口类CoClass(前边的贴子,我曾说过这个类);我们可以将它理解为一个类,一个实现接口的类,而Pooling就要用到它!当客户端需要数据时,那以应用程序服务器就会应用CoClass所实现的接口来和应用服务器本身的接口进行交互;而且所有连接、线程控制等操作都由你新建的CoClass所负责,之后才通过应用服务本身的接口进行数据的存取,步骤我理解是这样的:当然用户想建立某一个连接或是某一项费时操作时,而正好它现在没有和应用服务器进行通讯,这样的话,它就希望以最快的速度和应用服务器进行通讯,但步骤往往不是它直接和应用服务器进行通讯,而是它需要和CoClass的实现的接口进行作用,当这个辅助类(CoClass)给这个用户分配了线程、建立了连接等一些资源时,它才可以和应用服务进行通讯,你会不会觉的这是多此一举呢?不,应用这个辅助类可以检测是否有空闲的连接来让这个用户进行连接,是否有可用的其它资源让这个用户进行操作,这样才会正真的节省客户的时间,同时也大大的降底了服务器的担子;这便是它的作用;
    而至于如何建立进程、如果分配资源,又如何回收,下边有例子可供参考;
    我们来用一个例子来说;(你可以参考Delphi/Demo/Midas/Pooler这个例子 );
    嘻嘻,例子在我的坛子上呢,这儿放不上的;
      

  8.   

    提高分布式多层系统的效率之一(Connection Pooling)
    俺没有敢贴,怕各位骂
      

  9.   

    组件创建的时候怎样设置才能让组件释放的时候自动放入object pooling?好象默认的是没有用到object pooling的.
    客户端Dcomconnection.connected:=false相当于释放组件吗?
    ------------------
    Pooler Manange里边进行释放;
    Destroy
      

  10.   

    小小
      你怎么看Pooler中COM中的线程模式和实例模式?
      

  11.   

    无论用Pooler也好,还是不用Pooler也好,线程和实例模式还是要做好的;
    我觉的一个应用服务器起决定性的因素就是搞定线程和实例模式,当然,别的方面也同样可以提高执行效率,但是,如果没有搞定线程实例模式的话,那么其它方面就无从下手;就比如没有做好客户、应用服务程序的线程和实例管理的话,那么Pooler很可能就没有什么作用或是更本不可能发挥它的作用;其它的很多也是如此,不过,我所说的不包含对数据引擎的改良;
    小小到此一6,6下一滩口水
    嘻嘻