線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1889
推到 Plurk!
推到 Facebook!

COM+把CPU跑到100%

答題得分者是:seaturn99
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-24 22:39:38 IP:219.133.xxx.xxx 未訂閱
怪事都让我碰到。 用D7写了一个COM ,里面就一个 Transactional data Module,里面放ADOConnection和ADODataSet/DataSetProvider 一个方法,从DataSetProvider去数据。 客户端调用完COM 取完数据后立即释放接口。 但COM 在组件管理器里设置的闲置时间到达之前,一直抓住CPU。 OS是WIN2K PRO 但把这个COM 放到另一台机器,同样是WIN2K PRO,却没有这个问题。客户端调用完成后,COM 立即就释放掉CPU了。而且在客户端调用的时候,也没占到100%。 不知道有人碰到过类似的情形不?应该是WIN2K哪部分有问题呢?
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-25 00:03:48 IP:211.76.xxx.xxx 未訂閱
引言: 怪事都让我碰到。 用D7写了一个COM ,里面就一个 Transactional data Module,里面放ADOConnection和ADODataSet/DataSetProvider 一个方法,从DataSetProvider去数据。 客户端调用完COM 取完数据后立即释放接口。 但COM 在组件管理器里设置的闲置时间到达之前,一直抓住CPU。 OS是WIN2K PRO 但把这个COM 放到另一台机器,同样是WIN2K PRO,却没有这个问题。客户端调用完成后,COM 立即就释放掉CPU了。而且在客户端调用的时候,也没占到100%。 不知道有人碰到过类似的情形不?应该是WIN2K哪部分有问题呢?
pcplayer99 您好 : 1.請先利用工作管理員看是否有一個 dllhost.exe 佔用消耗太多 CPU time? 2.再利用元件服務 -> 電腦 -> 我的電腦 -> COM 應用程式 -> [您的應用程式 folder] -> 元件 (檢視請選清單檢查看看 => 物件,啟動,集區,呼叫中,與呼叫時間,看有沒有不正常殘存現象??) WinXP 中可以設定回收的參數(Win2000 我記得好像有一個設定呼叫完畢後回收的機制,不過忘了在哪了),另外不知道您有沒有在 Exit 前執行 SetComplete ?? 如果有加入 support transaction ,那這就很重要了... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- 發表人 - SouthWind 於 2004/07/25 00:06:24
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-25 00:56:06 IP:219.133.xxx.xxx 未訂閱
引言:
引言: 怪事都让我碰到。 用D7写了一个COM ,里面就一个 Transactional data Module,里面放ADOConnection和ADODataSet/DataSetProvider 一个方法,从DataSetProvider去数据。 客户端调用完COM 取完数据后立即释放接口。 但COM 在组件管理器里设置的闲置时间到达之前,一直抓住CPU。 OS是WIN2K PRO 但把这个COM 放到另一台机器,同样是WIN2K PRO,却没有这个问题。客户端调用完成后,COM 立即就释放掉CPU了。而且在客户端调用的时候,也没占到100%。 不知道有人碰到过类似的情形不?应该是WIN2K哪部分有问题呢?
pcplayer99 您好 : 1.請先利用工作管理員看是否有一個 dllhost.exe 佔用消耗太多 CPU time? 2.再利用元件服務 -> 電腦 -> 我的電腦 -> COM 應用程式 -> [您的應用程式 folder] -> 元件 (檢視請選清單檢查看看 => 物件,啟動,集區,呼叫中,與呼叫時間,看有沒有不正常殘存現象??) WinXP 中可以設定回收的參數(Win2000 我記得好像有一個設定呼叫完畢後回收的機制,不過忘了在哪了),另外不知道您有沒有在 Exit 前執行 SetComplete ?? 如果有加入 support transaction ,那這就很重要了... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- 發表人 - SouthWind 於 2004/07/25 00:06:24
谢谢 SouthWind 。 的确是 DLLHOST在占用CPU。不过这个DLLHOST是COM 的容器。主要还是COM 在占用CPU。 奇怪的是,同一个COM ,放到另一台电脑里,同样是WIN2K/SP4,却没这个问题。 另一个奇怪的是,在元件服务里,有问题的那台电脑看不到COM 被激活,以及激活的时间。就是您说的 物件,啟動,集區,呼叫中,與呼叫時間,在有问题的WIN2K里看不到。在那个COM 不户占用CPU的WIN2K里,能看到。而且,我将它的POOL用起来,调用完后COM 不会被释放掉的,也看不到它占用CPU。 我以前是在COM 里调用另外一个COM 的接口的时候会用SetComplete,这次是在一个EXE的客户端里调用COM 的Interface,几没写SetComplete,仅仅是在客户端简单地将声明的Interface的Variable给nil,就应该是释放掉COM 了。我试一下加个SetComplete看看。 谢谢您的意见!
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-25 02:24:28 IP:211.76.xxx.xxx 未訂閱
引言: 谢谢 SouthWind 。 的确是 DLLHOST在占用CPU。不过这个DLLHOST是COM 的容器。主要还是COM 在占用CPU。 奇怪的是,同一个COM ,放到另一台电脑里,同样是WIN2K/SP4,却没这个问题。 另一个奇怪的是,在元件服务里,有问题的那台电脑看不到COM 被激活,以及激活的时间。就是您说的 物件,啟動,集區,呼叫中,與呼叫時間,在有问题的WIN2K里看不到。在那个COM 不户占用CPU的WIN2K里,能看到。而且,我将它的POOL用起来,调用完后COM 不会被释放掉的,也看不到它占用CPU。 我以前是在COM 里调用另外一个COM 的接口的时候会用SetComplete,这次是在一个EXE的客户端里调用COM 的Interface,几没写SetComplete,仅仅是在客户端简单地将声明的Interface的Variable给nil,就应该是释放掉COM 了。我试一下加个SetComplete看看。 谢谢您的意见!
COM 管理器會為你的 Application 執行一個 DLLHOST instance,透過這種實作方式,您寫的 COM Application 不會因為 crash 導致其他 COM 崩盤.. 先試看看 Server 端加上 SetComplete ,這個 procedure 會執行 commit (在有 transaction 支援下),並釋放被呼叫 object instance.. 若還是一樣,檢查看看 COM 版本是否一致?? Server Pack 是否一致?? 另外,再 Check 看看是否 Client 有正常呼叫 COM 元件,正常執行?? ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-25 10:37:08 IP:218.18.xxx.xxx 未訂閱
引言: COM 管理器會為你的 Application 執行一個 DLLHOST instance,透過這種實作方式,您寫的 COM Application 不會因為 crash 導致其他 COM 崩盤.. 先試看看 Server 端加上 SetComplete ,這個 procedure 會執行 commit (在有 transaction 支援下),並釋放被呼叫 object instance.. 若還是一樣,檢查看看 COM 版本是否一致?? Server Pack 是否一致?? 另外,再 Check 看看是否 Client 有正常呼叫 COM 元件,正常執行?? ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
谢谢SouthWind如此有耐心。我能确定的是: 1. Client是一个EXE的 Application,它在调用 COM 的接口方法的时候工作正常,能够完成调用。如果这个时候在DELPHI里跟踪 COM ,也能看到的确一步一步的执行了那个方法直到结束。 2. 我在 COM 的方法里 加了 try ... finally SetComplete end;,把方法里的全部代码包起来,占CPU的现象同样存在。 3. 我的机器是WIN2K / SP4,用IE的 windows Update 打完所有补丁。我把这个COM 放到另一台机器里,同样的WIN2K /SP4,同样打完所有补丁,但在那里,就可以在组件管理器里观察到,当Client调用它的时候,它跑起来,当Client调用结束,它也就停下来。这时候,因为 POOL 的关系,它仍然还存在,并没有消灭掉。如果在有问题的机器里,因为它还没消灭掉,就会继续占用CPU。而在没有问题的机器里,则不会。所以,我基本上可以确定是因为两台机器的OS里有某种差异导致的。 4. 因为COM 里用到了TADOConnection/ TADODataSet,为保证两台机器的ADO相同,我专门从MS当了MDAC 2.7 下来在两台机器重新安装。 5. 在COM 会占住CPU的机器上,组件管理器里,观察不到COM 组件被调用时跑起来的现象,但实际上它是跑起来了。组件管理器里并不会按正常的情况显示那个COM 跑起来后的, => 物件,啟動,集區,呼叫中,與呼叫時間这里没有任何的显示。但在正常的机器上能够看到。 我可以放心的是,这个占CPU不放的现象,不是我的程式的错误,在别的机器上应该不会出现。但我还是想搞清楚究竟是为什么。
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-25 14:15:46 IP:211.76.xxx.xxx 未訂閱
引言: 谢谢SouthWind如此有耐心。我能确定的是: 5. 在COM 会占住CPU的机器上,组件管理器里,观察不到COM 组件被调用时跑起来的现象,但实际上它是跑起来了。组件管理器里并不会按正常的情况显示那个COM 跑起来后的, => 物件,啟動,集區,呼叫中,與呼叫時間这里没有任何的显示。但在正常的机器上能够看到。 我可以放心的是,这个占CPU不放的现象,不是我的程式的错误,在别的机器上应该不会出现。但我还是想搞清楚究竟是为什么。
這樣看起來很不正常,會不會是中毒了,被病毒從 COM 漏洞入侵了?? 所有 COM 物件應該在元件服務內都看得到狀態才對 .. 再換一台試看看,如果也沒問題,我想應該可以確認程式沒問題了 .. 這個問題也引發我的好奇,如果您找到原因,記得分享給大夥 ... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-26 12:18:25 IP:218.18.xxx.xxx 未訂閱
引言: 這樣看起來很不正常,會不會是中毒了,被病毒從 COM 漏洞入侵了?? 所有 COM 物件應該在元件服務內都看得到狀態才對 .. 再換一台試看看,如果也沒問題,我想應該可以確認程式沒問題了 .. 這個問題也引發我的好奇,如果您找到原因,記得分享給大夥 ... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- < face="Verdana, Arial, Helvetica"> 除了有问题的电脑外,我已经在3台电脑上试过了。那3台都没有这个问题。因此我决定把有问题的电脑重装OS看看。
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-26 18:22:12 IP:219.133.xxx.xxx 未訂閱
报告一下: 有问题的电脑,重装WIN2K PRO/OFFICE 2000/D7/ 现在这个COM 不会抓住CPU不放了。以前的系统里不知道有什么问题会导致那样的情况。
系統時間:2024-07-06 3:01:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!