急:COM对象创建后,在COM+中就处于激活状态,如何设置为即时激活(JIT)? 环境:D7, Win2000 Professional SP3, MS SQL 2000, ADO原来我在D5中对象创建后不会马上激活,为使用对象池,从D5升级到D7 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 抱歉,贴中我写错了一点,经测试:D5 + Win98/2000也会创建后马上激活。那就是我一直未用对,请高手指点。to eastliangliang(青苹果)(十年铸剑,汗祭青锋):谢谢!不过我是想在调用方法时再激活,调用完后又激死,以便放入对象池供其他用户使用。否则,每个用户都保持十几个激活对象,用户一多,就玩完了。 好像在COM中都是第一次的时候就将所有组件激活,然后任何使用的人都是使用他们的一个副本,不太像你理解的那种每个用户都保持十几个激活对象,用户一朵,就完的吧,个人理解,呵呵good luckePing 楼主要越俎代庖啦。这种事MTS/COM+已经帮你做啦,要么MTS/COM+为什么是无状态的呢。当你每次调用一个方法时,都是从对象池中挑一个用的,不需要你来管理对象池。不信用大数量连接进行测试,我曾经开了200个线程不停的向数据库中插入数据,除了慢些以外,没有玩完啊。不过退出线程时有时会死机,那是苹果的线程没做好(苹果也是初学)。总之我就是每次都激活的,而且李维推荐获取服务器对象越早越好,减少连接的代价。 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调用方法速度却加快(不用现创建)。 to eastliangliang(青苹果)(十年铸剑,汗祭青锋):越俎代庖, hehe, 哪敢,我对Delpi/COM+确实是知之不多,不用编程就行当然好啦。我是想请教怎么设置,总觉得我做的有问题。>我就是每次都激活的 是用CoClass.CreateRemote还是别的?>而且李维推荐获取服务器对象越早越好 我在Client端的COM对象是业务对象,而安全、数据、同步等 对象都是在Server端调用。Win2000组件服务(COM+)的显示:(1)对象:是指Client引用数还是COM+已创建的?(2)已激活:正在运行的?占用一个线程? (线程模式:Apartment 或 Rental(同步Neutral))(3)另外,设置池化后,Client创建后,池化数不减, Client释放后池化数却增加? 改:(3)另外,设置池化后,Client创建后,池化数跟着增加。为何?续:(4)Client退出后,对象、已激活都为0,再进入,对象、已激活同前, 池化数不变。池化起作用?(5)第2个Client进入,对象、已激活、池化数增加一倍,对象只能为 一个Client服务?问题太多,因为项目着急,自学来不及,只好有劳各位了。 楼主一下问出这么多问题,苹果只做过几个例子,实际的项目还没做过。这两天加班赶活,脑子没在这里,想不出要说些什么啦,研究技术也不是很深入,这些概念我也不是很清楚。感觉COM难在架构,编程并不是主要的。等我想到什么就来帖些吧,楼主如果自己解决了一些,记着也贴出来让苹果看看啊。 我的测试: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 是很好的搭配,你不可能创建一个对象后,不调用他的方法。 to ytwxw(wxw): 非常感谢!我本想Client一进入,就获得所有要用到COM的引用(李维推荐获取服务器对象越早越好)。如果你测试也如此,那只好用到时才创建,或者是创建后马上调用一个方法。 C++dll delphi静态调用怎么写? 请问如何获取页面元素位置并截图??? 请教一问题(顶者有分) 如何添加打印纸张类型及修改SIZE? vcl的鼠标左键按下消息派发机制问题,望高人前来解释vcl代码[100分奉上,留言有分] 如何刷新excel 表?? 怎样在报表中显示这个字段? 怎么得到当前被点击的columns的caption 如何动态给不同类型的控件赋OnMouseDown事件? 以 WDL结尾的文件用什么软件打开?先到先的分 TLabel的问题? 免费的国际一级域名和100M支持ASP、CGI空间,想要的请进
D5 + Win98/2000也会创建后马上激活。
那就是我一直未用对,请高手指点。to eastliangliang(青苹果)(十年铸剑,汗祭青锋):
谢谢!不过我是想在调用方法时再激活,调用完后
又激死,以便放入对象池供其他用户使用。否则,
每个用户都保持十几个激活对象,用户一多,就玩完
了。
任何使用的人都是使用他们的一个副本,不太像你理解的
那种每个用户都保持十几个激活对象,用户一朵,就完的
吧,个人理解,呵呵good luckePing
这种事MTS/COM+已经帮你做啦,要么MTS/COM+为什么是无状态的呢。
当你每次调用一个方法时,都是从对象池中挑一个用的,不需要你来管理对象池。
不信用大数量连接进行测试,我曾经开了200个线程不停的向数据库中插入数据,除了慢些以外,没有玩完啊。不过退出线程时有时会死机,那是苹果的线程没做好(苹果也是初学)。
总之我就是每次都激活的,而且李维推荐获取服务器对象越早越好,减少连接的代价。
------------------------------------------------
<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调用方法速度却加快(不用现创建)。
越俎代庖, hehe, 哪敢,我对Delpi/COM+确实是知之不多,
不用编程就行当然好啦。我是想请教怎么设置,总觉得我做
的有问题。>我就是每次都激活的
是用CoClass.CreateRemote还是别的?>而且李维推荐获取服务器对象越早越好
我在Client端的COM对象是业务对象,而安全、数据、同步等
对象都是在Server端调用。Win2000组件服务(COM+)的显示:
(1)对象:是指Client引用数还是COM+已创建的?
(2)已激活:正在运行的?占用一个线程?
(线程模式:Apartment 或 Rental(同步Neutral))
(3)另外,设置池化后,Client创建后,池化数不减,
Client释放后池化数却增加?
(3)另外,设置池化后,Client创建后,池化数跟着增加。为何?续:
(4)Client退出后,对象、已激活都为0,再进入,对象、已激活同前,
池化数不变。池化起作用?
(5)第2个Client进入,对象、已激活、池化数增加一倍,对象只能为
一个Client服务?问题太多,因为项目着急,自学来不及,只好有劳各位了。
这两天加班赶活,脑子没在这里,想不出要说些什么啦,研究技术也不是很深入,这些概念我也不是很清楚。感觉COM难在架构,编程并不是主要的。等我想到什么就来帖些吧,楼主如果自己解决了一些,记着也贴出来让苹果看看啊。
客户端第一次调用: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 是很好的搭配,你不可能创建一个对象后,不调用他的方法。
(李维推荐获取服务器对象越早越好)。如果你测试
也如此,那只好用到时才创建,或者是创建后马上调
用一个方法。