2009-04-18 14 views
2

私のアプリケーションでは、ユーザーがどれくらいのメモリを使用しているか、そしてアプリケーションがそれに近づいているかどうかを知ることができます。winformsアプリケーションのメモリ使用量

また、マシンがOS、ビデオカードなどにどれくらいのメモリを与えているか知っていますか? 。

例えば、4GBのメモリがある場合、アプリケーションに実際にどれだけのメモリが割り当てられているかを設定できます。

関数コール:
http://www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html

答えて

2

とにかく私は私のアプリケーションは、ユーザーが持っているどのくらいのメモリ伝えることができ、アプリケーションはその高い割合を占め近くになっている場合があります。

はい、可能です(他の回答のいくつかを参照してください)が、アプリケーションが本当に気にする必要はほとんどありません。これがあなたの記憶力に敏感である必要があると思われるところで、あなたがやっていることは何ですか?

また、マシンがOS、ビデオカードなどに与えるメモリ量を知っていますか? 。再び

、この WMI呼び出しを使用可能にする必要がありますが、大きな疑問は、なぜあなたはこれを行うために必要なのですか?

たとえば、4GBのメモリがある場合、アプリケーションに実際にどれだけのメモリが割り当てられているかを設定できます。

いいえ、これは設定可能な値ではありません。 .NETアプリケーションが起動すると、オペレーティングシステムは使用するメモリブロックを割り当てます。これはOSによって処理され、割り振るメモリの量を決定するために使用されるアルゴリズムを設定する方法はありません。同様に、そのメモリの量を設定する方法はありません。NETランタイムは管理されたヒープ、スタック、ラージオブジェクトヒープなどのために使用します。

0

は、私はあなたがGlobalMemoryStatusEx()を使用することができ、あなたはWMIを使用したくない場合は、すべての情報

0

を取得するために、WMIを使用することができると思います返信データ:
http://www.pinvoke.net/default.aspx/Structures/MEMORYSTATUSEX.html

MemoryLoadは、0〜100の数値を返します。 〜使用中の物理メモリーのパーセンテージ、TotalPhysは合計物理メモリー量をバイト単位で示します。

使用可能なメモリは物理(RAM)と仮想(ページファイル)の種類が混在しているため、メモリは使いにくいです。特定のブレンドはどこにあるのかは、オペレーティングシステムによって決まります。幸いなことに、これはいくらか構成可能です.Windowsでは使用する仮想メモリの量があればそれを指定することができます。

32ビットWindows(XP & Vista)のすべてのメモリを使用できるわけではありません。 Windowsは最大4GBのインストールを報告することがありますが、オペレーティングシステムとアプリケーションで実際に使用できるのは3.1〜3.2GBだけです。これは、IIRCの従来のアドレス指定問題と関係があります。

グッドラック

2

私は少し違った質問を読んだと思います。

Windowsタスクマネージャを使用するか、さらにはSysinternals Process Monitorを使用して、アプリケーションで消費されているメモリの量を把握することができます。これは、ピーク時にプロセスを確認して、プロセスがどのように動作しているかを確認する迅速な方法です。

出荷時の設定では、x86プロセスは2GBのRAMしかアドレス指定できません。つまり、マシン上の単一のプロセスは最大2GBしか消費できません。実際には、メモリー例外から外れる前にわずか1.5-1.8を消費する可能性があります。

Windowsのコピーが実際に処理できるRAMの量は、WindowsのバージョンとCPUのアーキテクチャによって異なります。

あなたの4GB RAMの例を使用すると、OSはあなたのアプリケーションに最大2GBのRAM(すべてのプロセスが共有する)を与え、それ自体は2GBを確保します。

実行中のオペレーティングシステムに応じて、これを調整できます。boot.iniの/ 3GBスイッチを使用すると、アプリケーションの場合は3GB、OSの場合は1GBに調整されます。これはOSにある程度の影響を与えますので、最初にその影響を見直して、あなたがトレードオフ(YMMV)で暮らすことができるかどうかを確認します。

1つのアプリケーションで/ 3GBを超えるアドレス指定ができるようにするには、PEイメージヘッダーに特定のビットを設定する必要があります。このquestion/answerには既にこの件に関する良い情報があります。

ゲームはx64アーキテクチャで変更されます。 :)

いくつかの良い参考情報:

Memory Limits for Windows Releases

Virtual Address Space