MTS对象不释放问题,深知MTS的朋友请进。(150分)

  • 主题发起人 主题发起人 阿朱
  • 开始时间 开始时间

阿朱

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DELPHI5+MTS+SQL SERVER 7+MSDTC开发,
MTS OBJECT事务方式为:需要一个事务。
我在中间层写了一个函数,很简单,就是把数据从数据库提出来,用了
TRY
...
SETCOMPLETE
EXCEPT
SETABORT
END
结构,中间层绝对没问题。
我在客户端FORMSHOW事件调用此函数,下一句紧接DCOM.CONNECTED := FALSE;但在MTS管理器中查看,我的COM:调用中 0 已击活 0 对象 1
MTS没有释放对象,引起连接资源浪费,
最奇怪的是,当执行到FORMSHOW事件的END;时(单步),END语句还没有执行
MTS COM对象竟释放了,怪!
我一直查看STACK,但没发现有异常压栈情况。
我又在中间层的函数 SETCOMPLETE 后加了一句DEACTIVATE,仍然无效。
用RPC原理也想不通。
请各位老兄,大侠,大哥们帮助!
 
150分还不够?苦啊。。。。小弟只有这么点家当了。
沈兄,PIPI兄,CAKK兄,CJ兄,你们都到哪里去了?
快帮小弟一把。
千万不能让这个问题淹没。
或许我的问题太长,实在对不起,问题确实有些难度,
多谢各位了。
(怀念茶叶蛋的日子)
 
刚刚看了com的书,看看能不能用一下

1。对象没有立即被释放,因为mts的优化的原因,保留该对象以便
下次调用时不用在创建
2。 不知道,咱也看看其他朋友有没有办法
 
如果你是在MTS管理器中(NT才有),可以指定客户端断开后到该COM对象停止
的时间间隔。你把这个事件间隔设置为0再试一下。
 
在此首先感谢sanrex,adminis两位大侠的回答,但是问题仍然没有解决。
我已在MTS中指定我的包属性为:关闭服务器进程空闲时间为0,
不管我的MTS事务超时设为0秒或更多秒,它也毫无反应。
事先申明:我的MTS并没有坏。

如果大侠们知道斑竹怎么
联系,麻烦你们联系一下斑竹,或许他可以聚集网上高手,为小弟会诊。小弟刚加入,不懂规矩,请烦劳各位了。

或者谁有微软MTS技术文档,小弟是否可以借阅?
 
阿朱:
首先说明:我没用过MTS,看了你写给我的e-mail,就马上看书学了一下。。。。

你的MTS是不是共享连接,如果是,连接不是断开,而是可以让其他用户还可使用。
呵呵,不熟,还要看书学习.....
 
沈兄确实对MTS不熟,客户端与MTS连接时,MTS自动产生一个COM实例,客户端断开时
,如果没有别人用它,COM自动释放,如有人用,COM会传给他。但我确实只有一个人
用。
 
为什么没人管?斑竹知道这件事吗?
 
阿朱,如果你自信中间层正确的话,我想你是没注意
mts安装后的包属性有以下两个属性
高级
关闭服务器进程
.当空闲时仍运行
.关机前空闲时间(默认2 minute)
你只要把 关机前空闲时间 设为0即可,但建议保留默认值.
 
》Y_zl兄:
您或许没有看我的第二条消息,我已设了,但不管用。
 
阿朱:
我在Win98+PWS+MTS中测试成功。

当你将DCOM.CONNECTED := FALSE;后将所有与AppServer有关的接口都释放。如

FTest1:=IDispatch(DCOM.AppServer) as ITest;
//....
FTest2:=IDispatch(DCOM.AppServer) as ITest;


当你想要释放MTS对象时:

DCOM.CONNECTED := FALSE;
//所有与AppServer有关的未释放的接口
FTest1:=nil;
FTest2:=nil;
 
MTS在释放对象时略有一些延时,另外MTS管理器的刷新也是有一定间隔的。
你的程序没有问题,属于正常现象。

另外,不要直接调用DEACTIVATE。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部