环境:D7, Win2000 Professional SP3, MS SQL 2000, ADO原来我在D5中对象创建后不会马上激活,
为使用对象池,从D5升级到D7

解决方案 »

  1.   

    抱歉,贴中我写错了一点,经测试:
    D5 + Win98/2000也会创建后马上激活。
    那就是我一直未用对,请高手指点。to eastliangliang(青苹果)(十年铸剑,汗祭青锋):
    谢谢!不过我是想在调用方法时再激活,调用完后
    又激死,以便放入对象池供其他用户使用。否则,
    每个用户都保持十几个激活对象,用户一多,就玩完
    了。
      

  2.   

    好像在COM中都是第一次的时候就将所有组件激活,然后
    任何使用的人都是使用他们的一个副本,不太像你理解的
    那种每个用户都保持十几个激活对象,用户一朵,就完的
    吧,个人理解,呵呵good luckePing
      

  3.   

    楼主要越俎代庖啦。
    这种事MTS/COM+已经帮你做啦,要么MTS/COM+为什么是无状态的呢。
    当你每次调用一个方法时,都是从对象池中挑一个用的,不需要你来管理对象池。
    不信用大数量连接进行测试,我曾经开了200个线程不停的向数据库中插入数据,除了慢些以外,没有玩完啊。不过退出线程时有时会死机,那是苹果的线程没做好(苹果也是初学)。
    总之我就是每次都激活的,而且李维推荐获取服务器对象越早越好,减少连接的代价。
      

  4.   

    Client创建后(还未设置池化), Win2000组件服务(COM+)显示:Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <Security>  1      1            0       0
    <COM1>      1      1            0       0       Client调用一个方法后(方法中SetComplete/SetAbort),
    已激活数变为0,对象数不变。另外,D6/D7关于Just-In-Time的Help中说:
    Type Lib Editor->CoClass->COM+页,有JIT的Check项,
    而我的D6/D7中却无,请问如何设置?to ePing(三少):
    谢谢!请别笑话,我对Delpi/COM+知之不多,只是现学现用,
    还请多指教。我的片面或错误理解:
    (1)Client创建COM(得到引用)后,COM+未实际创建,Client
    调用方法时,COM+才实际创建(或从Pool中取出),这样,
    Client创建COM后一直不释放,也不会增加COM+的太大负担。
    (2)但Client调用方法速度却加快(不用现创建)。
      

  5.   

    to eastliangliang(青苹果)(十年铸剑,汗祭青锋):
    越俎代庖, hehe, 哪敢,我对Delpi/COM+确实是知之不多,
    不用编程就行当然好啦。我是想请教怎么设置,总觉得我做
    的有问题。>我就是每次都激活的
     是用CoClass.CreateRemote还是别的?>而且李维推荐获取服务器对象越早越好
     我在Client端的COM对象是业务对象,而安全、数据、同步等
     对象都是在Server端调用。Win2000组件服务(COM+)的显示:
    (1)对象:是指Client引用数还是COM+已创建的?
    (2)已激活:正在运行的?占用一个线程?
        (线程模式:Apartment 或 Rental(同步Neutral))
    (3)另外,设置池化后,Client创建后,池化数不减,
         Client释放后池化数却增加?
      

  6.   

    改:
    (3)另外,设置池化后,Client创建后,池化数跟着增加。为何?续:
    (4)Client退出后,对象、已激活都为0,再进入,对象、已激活同前,
        池化数不变。池化起作用?
    (5)第2个Client进入,对象、已激活、池化数增加一倍,对象只能为
       一个Client服务?问题太多,因为项目着急,自学来不及,只好有劳各位了。
      

  7.   

    楼主一下问出这么多问题,苹果只做过几个例子,实际的项目还没做过。
    这两天加班赶活,脑子没在这里,想不出要说些什么啦,研究技术也不是很深入,这些概念我也不是很清楚。感觉COM难在架构,编程并不是主要的。等我想到什么就来帖些吧,楼主如果自己解决了一些,记着也贴出来让苹果看看啊。
      

  8.   

    我的测试:winxp professional,com+,apartment,设置池化(对象共用)
    客户端第一次调用:Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      1      1       1     0       0     另开一个客户端:
    Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      2      2       2     0       0
    任何一个客户端调用一个setcomplete的方法后Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      2      1       2     0       0     另一个客户端调用一个setcomplete的方法后
    Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      2      0      2     0       0   一个客户端退出后Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      1      0      2     0       0   再进入
    Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      2      1      2     0       0  两个都退出
    Prog标识   对象  已激活  池化  调用中  调用时间
    ------------------------------------------------
    <COM1>      0      0      2     0       0 对象在池中等待调用,另外在池中的对象不用create而只用active
    所以我觉得 池化+setcomplete 是很好的搭配,你不可能创建一个对象后,不调用他的方法。
      

  9.   

    to ytwxw(wxw): 非常感谢!我本想Client一进入,就获得所有要用到COM的引用
    (李维推荐获取服务器对象越早越好)。如果你测试
    也如此,那只好用到时才创建,或者是创建后马上调
    用一个方法。