あんにんにっき。

日々思ったことや、おこったことを記録するブログ。要するに日記。

oo4oその後

 どうも、.Netからoo4oでアクセスしている際は、
 Set OraDynasetオブジェクト = Nothing
 ではカーソル閉じないっぽい。


 OraDatabaseオブジェクトのCloseメソッドは内部的には動作しないようなので、意味なし。


 System.Runtime.InteropServices.Marshal.ReleaseComObjectでCOMの開放を行っても、どうもカーソル閉じないっぽい。
 GCが発生した地点で閉じるのかな?その辺まではみてない。

 間違い。カーソル閉じるっぽい。


 OraDynasetオブジェクトのSQLプロパティに新しいSQLを指定したあとで、Refreshメソッドの実行。
 これだと、カーソルの数は増えないので、カーソル数が上限超えることは避けられるっぽい。まあ、回避策にはなる。


 結局、oo4oで解決せずに、ストアドプロシージャを作って、そっちの中でOPEN、CLOSEするようにした。
 なんで最初からそうしなかったかというと、いろいろ理由はあるのだけどもなんだかいろいろ引っかかりそうなので割愛。大した理由ではないと個人的には思うのだけど、それが大事だと思う人もいるようだ、って事で。


 追記
 試したところ、GC.Collectでも開放できた様子。
 改修前の既存コードのあちこちにGC.Collectがあるな、と思っていたけどそういうことか。
 速度的には悪手だと思うけど。止まるよりはマシか。