C#アプリケーションの作業。メモリ消費を制限します。物理Vs仮想メモリ
タスクマネージャでアプリケーションメモリを使用すると、アプリケーションを長期間開いても継続的に使用率が増加します。
メモリリークを追跡してメモリ使用量を最適化するまでには、この作業には時間がかかるため、ダメージを制限したいと考えています。
Iは、次のロジックに実装:Process.GetCurrentProcess().PrivateMemorySize64
システム物理メモリの合計サイズの25%よりも大きい、または利用可能なメモリを残りのシステムが10%未満であれば、私は私のアプリケーションを再起動した場合
を。私は仮想メモリnew ComputerInfo().TotalVirtualMemory
ある別のメモリタイプがあります気づいしかし
(これが正しいと私のラップトップ上で16ギガバイトを返して)私はnew ComputerInfo().TotalPhysicalMemory
を使用し、システム全体の物理メモリーのサイズを取得します。これは2GBを返します。
研究では、仮想メモリはアプリケーションが他のアプリケーションに影響を与えることを心配することなく使用できるメモリ領域であると私に教えてくれました。私の質問に私をもたらします
は:
仮想メモリがある限り、私のアプリケーションがそれを凌駕していないとして、私は大丈夫だよな方法で信頼性が考慮されることはできますか?
物理メモリではなく仮想メモリをチェックするロジックを変更するのは論理的ですか?アプリケーションの仮想メモリ>システム仮想メモリの場合と同様に、私はアプリケーションを再起動します。
注:私はこれが正しいアプローチではなく、アプリケーションを最適化し、メモリリークを探しまで、私はそれがシステム上の不良市民として
おかげ
本当に問題がありますか?ガーベジコレクションの仕組みと、メモリがOSにどのように解放されたのかを読んだことはありますか?アプリケーションのサイズが大きくなるのは普通ですが、メモリが必要な場合はガベージコレクタがより攻撃的になります。メモリ使用量の増加や、システム上で問題を引き起こしている場合は、何も指定していません。 – itsme86
64ビットモードでプログラムを実行する必要があります。 'プロジェクトプロパティ/ビルド'に行き、無効にする32bitを好む –
@ itsme86こんにちは、私はよく分からない、問題はないかもしれないが、私たちは(タスクマネージャからの)高いメモリ使用量に関する多くの苦情を受けているそれがGCによって割り当て解除されるすべてのデータであっても、それを制限することを強いられました。あなたの入力をありがとう – Youssef