|
分類:[.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オブジェクトの列挙って出来るものなのでしょうか?
|