2019年6月30日日曜日

【VB.NET】実行時エラー3035 メモリ不足です

VB.NETからDAOで、ACCDB操作を行っているツールの
環境変更対応で『実行時エラー3035 メモリ不足です』にハマった。。

ネットで見つかる対処方法は、一通り試したが駄目。
うまく行くときもあるが、完全ではない。。

もろもろの事情で、調査中断となり
迷宮入りになったので、原因はわからないが
DAOのWorkSpaseをグローバル宣言し、複数のメソッドから
使いまわしていることで、メモリ開放がされず
エラーとなっている気がする。

GCやらSleepを入れて、気持ち成功率が上がった気がするので
これは、処理時間が伸びて、その間に
WorkSpaseの領域が開放されたのかなっと、、

おそらく、宣言をローカルで行えば、メソッド終了時に
メモリ開放されると思うが、影響範囲が大きすぎて、試せてないので
本当のところは迷宮入り。

そもそもDAOなんて、古いもんを使うな。ADOを使え。
つかACCDBなんて使うな。やたらとグローバル変数使うな。
ちゃんとテストでメモリ見ろ。と思った。

■実行環境
・Windows10(64bit)メモリ8G
・Office2016(32bit)

■試したこと
・レジストリの変更からバッファーやらタイムアウト値やらなんらやをいろいろ広げる
・SetOptionでソース内から一時的にバッファーを広げる
・ACCDBの最適化やらなんやら
・Accessのオプションのクライアント設定のタイムアウト値やらなんやら
・仮想メモリを広げる
・CGを入れる
・Sleep入れる
・処理分割し、メソッド掘って、宣言場所を変更(既存処理への影響が大きく途中で断念)

1 件のコメント:

  1. Wow thats extremely wonderful I actually have detected a brand new app smartcric tv this app is nice and that i have started gazing it.Thanks for the assistance and suggesting the matter i'll travel with it.Keep publication and writing new article.

    返信削除