|
レコードセット変数に格納したキャッシュ値を解放するやり方について、ご回答頂けたらと思い、投稿します。
レコードセットの解放の方法としては、以下コード例(サンプル Subプロシージャ)の方法となります。
メモリ解放の確認を行うため、Windowsタスクマネージャのプロセスで、VBAから起動されているアプリケーションのメモリ容量を確認します。
しかし、解放したにも関わらず、キャッシュがメモリに蓄積されているままになり、後の全体のレスポンスに影響しています。
処理実行後、一気にメモリがふくれ上がり、物理メモリ領域を超えてしまい、フリーズしたかのように応答しません。
なにか良い「メモリ解放」手段を教えていただけませんでしょうか。
Sub サンプル()
Const cstrSQL As String = "SELECT文のSQL条件は絞り込み済み" 'フィールド指定で、*(アスタリスク)が原因かと思いましたが、結果同様。
Dim 変数名 As ADODB.Connection
Dim 変数名2 As ADODB.Recordset
Call 変数名.Open(接続式)
Set 変数名2 = 変数名.Execute(cstrSQL) 'ここで格納した時点で、メモリに蓄積される。
'*************
'なんらかの処理
'*************
Call 変数名2.Close '<=Recordset切断
Set 変数名2 = Nothing '<=Recordset解放・・・ここで、メモリ蓄積値が解放されないとダメ。
Call 変数名.Close '<=Connection切断
Set 変数名 = Nothing '<=Connection解放
End Sub
上記コードで、Close&Nothingは、単純にメモリ有効期間を無効にするだけで、メモリ解放までは行っていない気がします。
また、データベースがExcelである為、Access装備の最適化(JRO等)の機能は利用不可です。
(※実行中のレコードセット蓄積値を解放したいので、最適化は該当しない。)
▼環境
・OS: Windows xp
・CPU: Core 2 Duo
・メモリ: 1GB
・VBA: Excel 2007
・DB: Excel 2007
※実際、Excel VBA使用ですが、Excelに特化した質問ではないと思ったので、こちらで質問させていただきます。
以上、宜しくお願いします。
|
|