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

わんくま同盟

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

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


(過去ログ 40 を表示中)
■20815 / )  名前が特定できない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オブジェクトの列挙って出来るものなのでしょうか?


返信 編集キー/


管理者用

- Child Tree -