私のアプリは.NET 4.0とWinFormを実行しています。私のアプリで仮想メモリ(コミット)サイズを減らすにはどうすればいいですか?
Mdiアプリケーションとサードパーティコントロールが使用されています。
実行中は、仮想メモリ(コミット)サイズはまだ増えています。 私はこのような行
GC.Collect(GC.MaxGeneration);
GC.WaitForPendingFinalizers();
SetProcessWorkingSetSize(p.Handle, -1, -1);
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int maximumWorkingSetSize);
としてそれがうまく機能しているとのworkingSetサイズを小さくしてリリースすることができます。 さて、ビジネスロジックのためにいくつかの画面を開いておく必要があります。そのため、メモリサイズはまだ成長しており、最終的にはアプリケーションを使い果たしてしまいました。
しかし、仮想メモリのサイズを縮小したり解放したりすることはできませんでした。
私はそれが動作していないのapp.config
<runtime>
<DisableDoubleMapping enabled="true" />
<gcTrimCommitOnLowMemory enabled="true"/>
</runtime>
構成に試みました。 それに及ぼす影響。
VMMap 3.1で表示しようとしました。 イメージはほとんどが.net ngenイメージです。 アセンブリの一部と追加の参照dllはそれほど大きくありません。 もちろん、dllのいくつか(winformのための第3のparyコントロール)は約5〜6MBです。
私のアプリで仮想メモリ(コミット)サイズを減らすにはどうすればよいですか?
できるだけ早く私に教えてください。
SetProcessWorkingSetSize(p.Handle, -1, -1);
このように感謝します。
魔法の杖はありません。よりスマートなコードを書く必要があります。ワーキングセットのサイズを減らすことは無意味です。 –