2009-05-28 11 views
0

私はほとんど興味があり、これは問題ではありません。通常、私の(C++)アプリケーションは、ごくわずかなメモリしか使用しません。私の現在のアプリはほとんどメモリを必要としないだろうと思ったが、それは3.7メガバイトとVMのサイズ17.3メガバイトを使用しています。アプリケーションは、リソースファイルに4つのアイコン、ローカル(ユーザー)設定の4つのintを持ち、アプリケーションLoCは< 1kです。ユーザがアイドル状態になったときにキー入力を検出し、リストボックスに行を書き込む(ウィンドウ関数を呼び出す)。それはシステムトレイに置かれ、タイマーは100msに設定されています。C#GUIは多くのRAMを使用しますか?

256バイト以下の少数の構造体を除いて、配列や記憶領域はありません。私のアプリが17MB以上のVMを使用しているのはなぜですか?

+0

あなたの使っていることをお知らせください。 WinForms/WPF/...? – Noldorin

+1

仮想メモリーと物理メモリーを混同していると思われます。彼らは非常に、非常に異なる獣です。参考までに、私は来週、その違いを説明するブログ記事を公開する予定です。 –

答えて

4

シンプルなC#アプリのメグ音は約です。

私は多年生の「ハードウェア使用とプログラマーの生産性」という議論を推測します。

10

管理対象アプリケーションであるため、CLRの一部もメモリにロードされます。また、CLRは新しいオブジェクト要求(システムから各オブジェクトを割り当てることはありません)を満たすために、大量のメモリを割り当てます。また、マネージドモデル(スレッドプール、ガベージコレクタなど)内の各アプリケーションに割り当てられる他のオブジェクトもたくさんあります。

私はそれを減らすことについて多くのことをすることはできませんが、反面、アプリケーションの複雑さに比例して線形に表示されることはありません(複雑さを2倍にすると、メモリを2回使用する)。

2

管理対象スレッドごとに1MBのスタックがあることに注意してください。あなたがスレッドで何かをしているなら、それはすぐにMBのカップルです。

4

メモリを使い果たしていることが気になる場合は、.NET memory profilerを入手してください。

3

.NETフレームワークで書かれたプログラムは、本来、より多くのオーバーヘッドを持ちます。

2

Hello Worldアプリのメモリ消費について心配する必要はありません。

管理言語アプリケーションは、すべてのメモリ割り当てが割り当て解除されないリスクがあるCとは異なる方法で、メモリ使用量を処理します。 アプリケーションがアイドル状態になるまで、CLRが割り当て解除/ガベージコレクションを延期する可能性があるため、アプリケーションがmalloc/deallocに多くの時間を費やしていると、.NETアプリはC++で書かれた同等のアプリより速く実行されることもあります。

関連する問題