2012-06-28 30 views
5

私はOleDbConnectionとしばらくの間キャッシュしないようにしてきました。基本的に私は別のアプリケーションから書き込まれている共有Accessデータベースにアクセスしています。その後、値を読み戻しています(Last Write時間とそれに続く1秒の遅延でチェックされています)。OleDbConnectionキャッシュを無効にする/フラッシュする

残念ながら、これは完全に信頼できません。

私が読んで(と非常識行く)接続プールを無効にする方法、およびそれぞれの可能な更新の後、その後午前、再接続する前に次のことを行ってきた:

_connection.Close(); 
_connection.Dispose(); 
_connection = null; 
OleDbConnection.ReleaseObjectPool(); 
GC.Collect(); 

これに加えて、接続をstringは接続プールをOLE DB Services = -2で無効にします。最後に、Jet 4.0のレジストリでPageTimeoutを '10'に変更しました。

残念ながら、これらの対策のすべては効果がありません。今私が考えることができるのはthis Microsoft KB Articleに記載されているもので、JRO.JetEngine.RefreshCacheと呼んでいます。唯一の問題は、引数がADODB.Connectionであることです。私はむしろ私のデータベース全体の層を書き直したいのではなく、レガシーCOMオブジェクトを使ってこの機能を利用するために私のソフトウェアがレコードをどこに読み込んでいるのかは分かりませんが、唯一の方法かもしれません。

私の質問は、現在ADODB(ADO.NETでなくても)を使用するように書き直すこの作業を行っていますが、OleDbConnectionのキャッシュを無効にすることは可能ですか?

答えて

関連する問題