这是我从电子书上抄来的一段:
6. 资源
由于对象一直在不停地被创建、关闭,事务处理到处都在进行,因此MTS 必须提供一条途径让多个
对象共享某些有限或重要的资源。利用资源管理器(resource manager)和资源分配器(resource dispenser),
MTS就可以完成这一点。资源管理器用于管理持久型数据,如收支余额和财产总量等。Microsoft在MSSQL Server 中提供了一个资源管理器。资源分配器管理非持久资源,如数据库连接等。Microsoft为
ODBC 数据库连接提供了资源分配器,而Borland 为BDE 数据库连接提供了资源分配器。
如果一项事务用到了某些类型的资源,它就取得这些资源,使其成为事务的一部分,这样在事务
过程中对资源所做的改变就能够参与事务的提交或回滚操作。上面是抄的,按道理说链接应该是临时资源,但是应该MTS管理器不会立即关闭并释放
资源以便可以接受下一次的调用。你可以在MTS管理程序中设定关闭服务器的时间间隔。
上面是我根据书籍和自己编写程序的感觉。

解决方案 »

  1.   

    1. 如果component是VC写的话, 有可能是object pooling的原因.
    2. 如果后端是SQL的话, 用SQLOLEDB去连数据库. 在连之前disable OLEDB 的session pooling - 这是通过registry中OLEDB Service实现的. MSDN 中有详细步骤.不过, 我觉得不是"关闭服务器的时间间隔"的原因.
      

  2.   

    关闭服务器的时间间隔也是指资源释放的问题。你可以详细看一下一本
    COM+组件编程技术内幕的书。有VC VB Java的范例。
      

  3.   

    如果你指的是component service 中Server Process shut down 的设置, 的确是如果dllhost都shutdown了, 那资源就会被释放.
    问题的关键应该是如果dllhost仍然在, 那object被deactivated 后是不是会保持原状态. 我还没有reproduce这问题, 不过理论上是应该不会保持的确 - 除非是object pooling(VC) 或OLEDB Session Pooling 的原因.
      

  4.   

    bucher:
    這樣你都要頂?
    那你不是成日都要頂了?
    怎麼還有空上這來轉啊
    呵呵。。
    兩次調用的是同一連接嗎
    沒有用Pooling嗎?(到MMC裡面看清除點啊!)
    連接真的是共用的嗎?還有。。自己琢磨琢磨吧。。
    我也說不了這麼多啦
      

  5.   

    bucher:
    這樣你都要頂?
    那你不是成日都要頂了?
    怎麼還有空上這來轉啊
    呵呵。。
    兩次調用的是同一連接嗎
    沒有用Pooling嗎?(到MMC裡面看清除點啊!)
    連接真的是共用的嗎?還有。。自己琢磨琢磨吧。。
    我也說不了這麼多啦我也頂。
      

  6.   

    一点补充:
    我是用VB写的,使用sqloledb连接服务器SQL7。
    可能是oledb的session pooling的关系,我再放一个静态变量进去应该就能够知道了。
    不过如果connection对象被销毁了,oledb的pooling如何自动恢复到connection对象上的?
      

  7.   

    btw:我指的是JIT激活,不是组件的自动关闭功能。在组件属性的“激活”选项卡上可以看到“JIT激活”选项,我指的是这个。
    估计只有组件实现了iobjectcontrol接口才能真正使用到JIT功能。
      

  8.   

    VB写的component已经by default实现IObjectControl了
      

  9.   

    如果已经实现了objectcontrol是不是意味着我无法为deactive调用写代码,所以导致了部件无法Deactive.我回去试验一下,我会把结果用新的贴子法上来的,这个贴自我要给分了.to TechnoFantasy:你的那本电子书可不可以发给我 [email protected]
    to GoldenLion:能不能推荐几本关于COM+的书,我看了<深入理解COM+>,可都是点到为止,不够看.