关于com+组件定时连不上数据库的问题(200分)

  • 主题发起人 主题发起人 bessxq
  • 开始时间 开始时间
//我之前在做COM+, 都利用了其stateless的特性,
所谓stateless是不是就是用完就关?
我发现用客户端exe文件的调用方式就不会有问题,内存和dllhost会在不用时释放
但是用asp组件时就不会释放,是不是架构有问题?
 
呵,那我就知道了,好象是哪个连接没有释放了:)
不过我是从。NET中得出的,我以前也出现这问题,我释放了就好了:)
祝你好运
 
在asp怎么释放啊?
也是先create
用完free吗?
 
SET XXXX=nothing
 
我沒有用過ASP, 也不確定你問的問題, 愛莫能助
當在COM方法中要結束前, 如果有調用到SetComplete或SetAbort時, 方法調用完成後
目前COM的實例將會交回給MTS;
而當下一次調用同一接口的方法時, MTS會再配置一個
新的實例, 來執行調用的方法;
在此情況下, 因為每次執行調用的實例都會不相同, 所以
不能將程式執行的狀態保留在此類的實例中(因為每次的實例都不一樣),所以稱此類的COM
物件為Stateless;
另有一個機制叫Object Pooling,可以用來暫存對象的對象池;
當每次
呼叫方法, 可以從對象池取出對象實例, 供調用方法;
待調用方法結束後, 再將對象實例
還給對象池;
目前MTS(2000 COM+)並沒有Object Pooling功能(XP沒有測過, 不確定);

以當要配置使用實例時, 必需重新建立一個新的實例, 方法調用結束,實例還給MTS後,
MTS會直接釋放掉;
OnActivate方法, 是在實例配置方法調前, 會先進入, 以便執行初始化動作;
OnDeactivate, 是在方法調用結束後, 實例還給MTS後, 會被調用到, 以便執行資源釋放
的動作;
如果在沒有Object Pooling中的MTS(COM+)中或不做stateless的COM,
初始化寫在Initialize或OnActivate, 或用Destroy、OnDeactiveate並沒有差異;
如果考慮到有Object Pooling的環境, 則應寫在OnActivate及OnDeactiveate
目前已知Application Center有支援Object Pooling功能
 
多人接受答案了。
 
后退
顶部