2009-09-17 7 views
6

関連占有しているどのくらいのメモリを決定することができます
Preventing Memory issues when handling large amounts of textは、どのように私は私のプログラムは、現在、私の前の質問へ

は、私のプログラムが占有しているどのくらいのメモリ容量を決定する方法はあります?私は大量のテキストファイルを処理し、通常は処理されたオブジェクトをメモリに格納します。あまりにも多くの情報がある時があり、私は記憶がなくなるでしょう。私はメモリ割り当ての問題を回避するための解決策を持っていますが、必要な時にはパフォーマンスを低下させるページングを避けるために、必要なときにのみ使いたいと思っています。私が占有しているメモリ量を把握する方法があるので、必要な時にだけ私の情報をページすることができますか?

注:私のプログラムが必要なときにページングを開始するために利用できるソリューションを探しています。

答えて

5

あなたはGC.GetTotalMemoryを試すことができます。

は、現在割り当てられていることが考えバイト の数を取得します。 パラメータは、この メソッドが短い間隔を待つことができるかどうかを示します。 戻り、システム がゴミを収集して オブジェクトを確定できるようにします。注意すべき

重要なのはこの部分です:「現在割り当てられていることが考えバイトの数を取得します」。これは、この方法が100%正確ではない可能性があることを意味します。これがわかっている限り、アプリケーションの実行中の特定の時点で仮想メモリの使用率を大まかに知ることができます。

編集:私は今、おそらくより生産的になる別のソリューションを提供してみましょう:perfmonCLR performance countersを使用しています。

+0

> "[...]現在マネージメモリに割り当てられたバイト数の利用可能な最善の近似値" 文句を言わない、このすべての管理対象アセンブリで使用されるメモリの量を取得しますか? –

+0

はい、現在のAppDomainでのみ使用されます。この種のものにはperfmonの使用を強くお勧めします。 –

3

コードプロファイラを使用する必要があります。これらは、何が起こっているのか、メモリが使い果たされた場所などを正確に教えてくれるでしょう。

FYI:それはまれに思っています。

+0

+1:それはあなたの質問を満足させるものではありませんが(あなたがコードでそれをやりたいので)、これはまだ当てはまります。プロファイリングは、コードアクセス可能な測定によって不明瞭になる可能性のあるメモリ使用量の側面を明らかにするため、依然として設計の一歩です。たとえば、 'WorkingSet64'には共有メモリが含まれています。ページングするかどうかを決めるときに合計から差し引いてください。 –

7
long bytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
3

長いバイト= System.Diagnostics.Process.GetCurrentProcess()。WorkingSet64のためのより多くのSee Here

関連する問題