【解決方法】Vb.net リリースは 1 台のコンピューターで実行され、別のコンピューターではメモリ不足になります

プログラミングQA


デスクトップ 64bit 16GB Win 10 Pro 21H2
ラップトップ 64bit 16GB Win 10 Pro 22H2
VB.net リリースの exe はデスクトップで正しく実行されます。
ラップトップでコンパイルする場合でも、デスクトップからコピーした exe を実行する場合でも、
メモリ不足エラーが発生します: g = Graphics.FromImage(Pages(pvDrawPage))
コレクションページに 6 つの 1920×1080 3byte ビットマップがあります
毎秒、表示するためにパネルのピクチャボックスに 1 をコピーします。
デバッグでは、メモリが増加し、最終的にエラーが発生することがわかります。
タスクマネージャーも同様。
デスクトップでのメモリ使用量は安定しており、わずかに増減し、終日実行されます。

私が試したこと:

どちらのコンピューターも VS2022 を使用しています。
開発ファイルと DLL をデスクトップからラップトップに移動しました。
ビルドは成功します。

解決策 1

メモリ使用量が増加し続けるため、リリースしていないビットマップ、グラフィックス オブジェクト、ハンドル、および/または関連クラスなどを作成している可能性があります。「メモリ不足」エラーは、要求されたリソースが利用できないことを意味します。それらはすべて使用されているため、必ずしも実際のメモリを参照しているわけではありません! エラーは Graphics 作成行で発生するため、それが原因である可能性が最も高くなります。

そのため、Graphics コンテキストをラップすることから始めます。 using ブロック:

C#
using (Graphics g = Graphics.FromImage(Pages(pvDrawPage)))
   {
   ...
   } // The context will be disposed here when it goes out of scope.

VB
Using g As Graphics = Graphics.FromImage(Pages(pvDrawPage))
   ...
End Using ' The context will be disposed here when it goes out of scope

グラフィックス コンテキストは Windows ハンドルをラップし、システム全体で共有される希少なリソースであることを忘れないでください。 あなたのラップトップがすでにたくさんのそれらを使用している場合、それはあなたのデスクトップの前に使い果たされます – しかし、それも最終的には使い果たされます!

コメント

タイトルとURLをコピーしました