2016-12-07 23 views
-1

C#アプリケーションの作業。メモリ消費を制限します。物理Vs仮想メモリ

タスクマネージャでアプリケーションメモリを使用すると、アプリケーションを長期間開いても継続的に使用率が増加します。

メモリリークを追跡してメモリ使用量を最適化するまでには、この作業には時間がかかるため、ダメージを制限したいと考えています。

Iは、次のロジックに実装:Process.GetCurrentProcess().PrivateMemorySize64システム物理メモリの合計サイズの25%よりも大きい、または利用可能なメモリを残りのシステムが10%未満であれば、私は私のアプリケーションを再起動した場合

を。私は仮想メモリnew ComputerInfo().TotalVirtualMemoryある別のメモリタイプがあります気づいしかし

(これが正しいと私のラップトップ上で16ギガバイトを返して)私はnew ComputerInfo().TotalPhysicalMemoryを使用し、システム全体の物理メモリーのサイズを取得します。これは2GBを返します。

研究では、仮想メモリはアプリケーションが他のアプリケーションに影響を与えることを心配することなく使用できるメモリ領域であると私に教えてくれました。私の質問に私をもたらします

は:

仮想メモリがある限り、私のアプリケーションがそれを凌駕していないとして、私は大丈夫だよな方法で信頼性が考慮されることはできますか?

物理メモリではなく仮想メモリをチェックするロジックを変更するのは論理的ですか?アプリケーションの仮想メモリ>システム仮想メモリの場合と同様に、私はアプリケーションを再起動します。

注:私はこれが正しいアプローチではなく、アプリケーションを最適化し、メモリリークを探しまで、私はそれがシステム上の不良市民として

おかげ

+1

本当に問題がありますか?ガーベジコレクションの仕組みと、メモリがOSにどのように解放されたのかを読んだことはありますか?アプリケーションのサイズが大きくなるのは普通ですが、メモリが必要な場合はガベージコレクタがより攻撃的になります。メモリ使用量の増加や、システム上で問題を引き起こしている場合は、何も指定していません。 – itsme86

+0

64ビットモードでプログラムを実行する必要があります。 'プロジェクトプロパティ/ビルド'に行き、無効にする32bitを好む –

+0

@ itsme86こんにちは、私はよく分からない、問題はないかもしれないが、私たちは(タスクマネージャからの)高いメモリ使用量に関する多くの苦情を受けているそれがGCによって割り当て解除されるすべてのデータであっても、それを制限することを強いられました。あなたの入力をありがとう – Youssef

答えて

0

を振る舞う起動するたびにアプリケーションを再起動したい知っています仮想メモリの仕組みについての誤解があるようです。

研究では、仮想メモリはアプリケーションが他のアプリケーションに影響を与えることを心配することなく使用できるメモリ領域であると私に語った。

プロセスが仮想(または論理)アドレス空間内に存在します。仮想アドレスページ内では、仮想ページは、(1)二次記憶装置にマップされるか、 (2)は、物理ページフレームにマッピングされる。または(3)マッピングが全くない(すなわち無効である)。

仮想メモリは、アプリケーションがそれを超えない限り、信頼できると見なすことができますか?

仮想メモリの制限を超えることはできません。仮想メモリの終わりに達する前に、他の制限に達するのが好きです(ページファイルスペース、プロセスクォータ、システムパラメータなど)。

+0

あなたの答えをありがとう、私は質問があります。 「仮想メモリの限界を超えることはできません」と言えば、APPは16GBマシンで2GBを超えることはできません。 '新しいComputerInfo()。TotalVirtualMemory'は私に2GBを与えます – Youssef

+0

いくつかのことがあなたを制限するかもしれません。 32ビットOSを実行している場合、理論上は4GBしかアクセスできません。また、システムにプロセス制限を設けることもできます。 – user3344003

関連する問題