C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 名前が特定できないCOMオブジェクトを開放したい


(過去ログ 40 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■20815 / inTopicNo.1)  名前が特定できないCOMオブジェクトを開放したい
  
□投稿者/ zingbay (1回)-(2008/06/17(Tue) 11:29:07)

分類:[.NET 全般] 

こんにちは。
ちと厄介な状況にありまして、ご教授頂けると幸いです。

【前提条件】
ASP.NET2005 と Oracleにて構成されているプログラムが1000本強ありまして
Oracleとの接続にoo4を使用しています。
(太古の時代に開発されたシステムを強引にASP.NET化しております)

コード例)
'グローバルスコープで定義されたオブジェクト
DIM a as Object

'データが読みたくなったその時に
Set a = Oradatabese.dbCreatedynaset("SELECT * FROM FOO",0&)

の様なコードが辺り一面に散乱しており、複数の関数階層で
参照しております。

【主訴】
負荷が掛かる状況下で、あるプログラムを使用していると
ヒープ領域を使い果たして死んでしまうので、なんとかならないか?との問い合わせを受けまして
releaseComObjectで開放したら良いのでは?と回答したのですが
1000本強のプログラムで、そこら中に好き放題宣言されているdynasetオブジェクトの有効期限を見極めて
releaseComObjectを行なうには予算が無いと反撃されました。

【考察】
そこで考えたのですが、使用中、若しくは使用して参照カウントが残っているcomオブジェクトを列挙できれば
アプリケーションの構造上、一箇所に開放ロジックを仕込む事は可能なので、一気に開放できるなと。

for each dead_com in comオブジェクトの集団
if not isnothing(dead_com)
releaseComObject(dead_com)
end if
dead_com.nothing
end for
gc.collect

の様な事をしたいのですが、comオブジェクトの列挙って出来るものなのでしょうか?


引用返信 編集キー/
■20816 / inTopicNo.2)  Re[1]: 名前が特定できないCOMオブジェクトを開放したい
□投稿者/ シャノン (477回)-(2008/06/17(Tue) 11:41:46)
No20815 (zingbay さん) に返信
> comオブジェクトの列挙って出来るものなのでしょうか?

無理だと思うなぁ…
グローバル変数ということで、仮に列挙が可能であったとしても、別の参照で上書きされている可能性も低くないんじゃないかと思うし。
引用返信 編集キー/
■20817 / inTopicNo.3)  Re[2]: 名前が特定できないCOMオブジェクトを開放したい
□投稿者/ zingbay (2回)-(2008/06/17(Tue) 11:47:58)
No20816 (シャノン さん) に返信
シャノンさん、こんにちは。

> ■No20815 (zingbay さん) に返信
>>comオブジェクトの列挙って出来るものなのでしょうか?
>
> 無理だと思うなぁ…
> グローバル変数ということで、仮に列挙が可能であったとしても、別の参照で上書きされている可能性も低くないんじゃないかと思うし。

アプリケーションが保持しているメモリ領域なので、(漏れ漏れであったとしても)何らかの参照が可能だろうと
思っているのですが…
引用返信 編集キー/
■20819 / inTopicNo.4)  Re[3]: 名前が特定できないCOMオブジェクトを開放したい
□投稿者/ シャノン (479回)-(2008/06/17(Tue) 11:50:07)
No20817 (zingbay さん) に返信
> アプリケーションが保持しているメモリ領域なので、(漏れ漏れであったとしても)何らかの参照が可能だろうと
> 思っているのですが…

そのような方針のもと、仮に可能であったとしても、Microsoft が方法を文書化していることも、動作保証をしてくれることもないと思います。
引用返信 編集キー/
■20821 / inTopicNo.5)  Re[4]: 名前が特定できないCOMオブジェクトを開放したい
□投稿者/ も (23回)-(2008/06/17(Tue) 12:17:48)
CoInitializeとCoUninitializeの中で参照カウントしないラッパDLLを噛ませるとか…ちょっと思いついたけど余りにも怖い
引用返信 編集キー/
■20822 / inTopicNo.6)  Re[1]: 名前が特定できないCOMオブジェクトを開放したい
□投稿者/ Jitta on the way (114回)-(2008/06/17(Tue) 12:23:45)
そもそも、使用するツールについて正しい知識を調べることなく始めてしまったツケですから、ためるとますます増えるだけです。予算があろうが無かろうが、最初の回答しか道はありません。

ただ、幸か不幸か、ASP.NET です。Page オブジェクトの破棄、あるいは返送をするタイミングで破棄してしまってもかまわないと思います。

ただし

グローバル スコープというのが Module ブロックのことなら、この方法は通じないと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -