2016-08-30 3 views
0

私のソリューションを.net 4.0から.net 4.6.1にアップグレードし、いくつかの奇妙な動作を観察しました。.net 4から4.6.1へのソリューションアップグレード後のパフォーマンス低下

私はプログラムを持っており、このプログラムでは、2倍の配列のバイナリファイルを読み込んでRAMに保存するシーケンス(シーケンス1)を持っています。

シーケンス1(プログラムはシングルスレッド)を実行するたびに、マシンはCPUの25%(4コアマシン内)を使用していました。 シーケンス1で正常に動作しますが(シーケンスは25%で実行されます)、前の場合シーケンス1私はいくつかの算術演算を実行し、いくつかのクラスを割り当てることを実行しますシーケンス0の場合、シーケンス1になると、CPUの70〜90%が使用されます。

ガベージコレクションメカニズムに接続されている可能性があります。私は右のsequence0sequence1を呼び出す前に)後GC.Collectをゼロにし、呼び出すためのすべてのクラスを設定しようとしましたが、私はまだ70から90パーセントで動作sequence1を取得します。おそらくこれは、実行中にそれが更新されたGCアルゴリズムに関連していますsequence0

+0

'gcConcurrent'がアクティブになっている可能性がありますか? app.configファイルで動作を再生できます。主な質問は、今それは速いですか? PGOでもかまいません(私のトップ質問の1つを参照)。 – leppie

+0

問題を推測するのではなく、アプリケーションのパフォーマンスをプロファイルする必要があります。まず、.NETのperfmonカウンタを見て、2つの実行を比較して、何が違うかを確認する必要があります。 – Paolo

+0

@Paolo、私はperfmonを試して比較しますが、比較しなくても、シングルスレッドのプログラムは25%を上回ってはいけません(90%も)。 –

答えて

1

4.6.1にアップグレードするとGC.Collect()呼び出しに時間がかかることがあります。 ガベージコレクションへの明示的な呼び出しがあるかどうかを確認してください。 これはまた、メモリを割り当てたジョブを実行した後で、より多くのCPU使用量を得る理由を説明しています。割り当てられたオブジェクトが多い場合、ガベージコレクションに時間がかかります

+0

あなたが正しいかのように見えますが、GCコールを1つ見つけて削除し、CPU使用率が再び上昇しないようにしてください。 .net 4.6がGCコレクションを自動的に処理するのが好きなようです。なぜなら、私は最初にこの呼び出しを持っていた理由を覚えておいてください。 –

関連する問題