1

2 つのアプリケーションを使用したソリューションがあります。1 つは Windows サービス プロジェクトで、もう 1 つはランチャー (Windows サービスのインストールと開始) です。インストールされている Windows サービスにメモリ プロファイラーをアタッチして、メモリ使用量とオブジェクト サイズに関する情報を収集し、OutOfMemory 例外を調査したいと考えています。

これが私が使用したアプローチです。
まず、「VSPerfCLREnv.cmd /samplegclife」を実行しました。これにより、プロファイリング環境変数が初期化され、メモリ プロファイリングが有効になります。
次に、サービスを起動するランチャーを起動します。
最後に VS 2010 -> 分析 -> プロファイラー -> アタッチ (Windows サービスへ)。

しかし、プロファイリングを停止すると、オブジェクトのサイズやメモリ使用量に関する情報が表示されません。
私は何か間違ったことをしていますか?

4

2 に答える 2

0

わかった。
プロファイラーを .net プロセスに接続してメモリ データを収集するには、次の手順に従います。

1. プロファイリング環境変数を初期化します。
VSPerfClrEnv /globalsamplegc
PC を再起動します。

2. プロファイリング セッションを開始します:
VSPerfCmd /start:"sample" /output:"C:\log.vsp" /crosssession

3. プロファイラーをプロセスにアタッチします:
VSPerfCmd /attach:[PID]

4. プロファイリングを停止するには:
VSPerfCmd / VSPerfCmd のデタッチ
/shutdown

詳細については、これを参照してください。

于 2013-11-15T11:07:56.363 に答える
0

実際には、データの保存中にオブジェクトのメモリが破損したことを意味していました...これを除外するには、GC.collect() のようなガベージ コレクタを呼び出し、null を割り当てて未使用のメモリを解放する必要があります...例: string sTest= "テスト済み";文字列 sAssign=sTest;sTest=null; オブジェクトの合計メモリを表示するには、GC.GetTotalMemory(false); を使用します。

于 2013-11-11T13:11:17.237 に答える