2011-01-31 4 views
1

Visual Studio 2008アプリケーションでは、Windows XPではC++を使用しています。Windowsアプリケーションが多すぎるメモリを消費します。どんなアドバイスですか?

"常に新しいオブジェクトを削除する"アドバイス以外の有用なアドバイスはありますか?

編集:実際には、プログラミングに関するアドバイスを探しています。

+1

今すぐ購入いずれか、またはメモリプロファイラを実行します。この種の状況に対して一般的な助言を与えるのは愚かです。あなたのメモリリークがどこにあるのか把握し、修正してください。 –

+2

あなたの質問から、アプリケーションがメモリをリークしているのか、同時に多くのデータを同時にメモリに保存する必要があるため、メモリが多量に消費されたのかは明らかではありませんか? –

+0

メモリはどこに行きますか?それは漏れているのか、実際に使われていますか? – sharptooth

答えて

0

あなたは "あまりにも多くのメモリを消費します" によって何を意味するかによって異なります。

A)つまり、問題を引き起こすと予想される大きなデータ構造をロードまたは生成する必要があります。

この場合、ハードドライブがページの出し入れを開始するために物理メモリが多すぎるか、またはii)あまりにも多くのアドレススペースが必要です。つまり、穴が見つからないため割り当てが失敗します。想い出?

IIの

)は、64ビットのビルド使用を検討し、断片化の用心、大規模なデータ構造を格納するための共有メモリを使用することを検討して - 小さいもの

Bに大きなデータ構造を壊す、早期に大きなバッファを割り当てる)それは使用することによって、あなたを驚かメモリの負荷。

あなたのリークやバグを見つけてください - さまざまなプロファイラが利用できます。また、ビジュアルスタジオにはdebug allocフックが組み込まれています。バッファサイズ(特に偶発的なラップアラウンド)を計算するための計算が壊れていますか?

スマートポインタを使用して削除を管理します。

+0

基本的に私のアプリケーションはMSMQからメッセージを受信し、データベース(SQL Server)にログを記録します。 – Chrys

+0

@Chrys - あなたのMQリソースと未使用のDbリソースを解放していますか? –

+0

実際に私の間違いは、私が上に書いたアドバイスに従わなかったことです(常に新しいオブジェクトを削除します)。しかし、アドバイスをありがとう。 – Chrys

0

メモリリークがあると仮定すると、他のプロファイルを購入/実行する前に問題を投げ捨てる無料のソリューションがあります。これはUMDHです。それがあなたの状況なら、ほとんどのメモリリークを検出できます。

http://support.microsoft.com/kb/268343

関連する問題