3

PostSharp で信じられないほど優れたパフォーマンス動作を見つけました。速度を評価するために、1 つの関数を指定された回数実行する小さなプログラムを作成しました。PostSharp が有効になっている場合は、メモリ内だけで数百の文字列を生成および削除します (構成が固定されていないため、自動ではありません)。インターン)。ループは、かなりの時間 (数ミリ秒) で実行されます。

現在、数百万回の実行で違いを測定することはできません.400億回までの反復のクレイジーな実行は、同じ数の呼び出しを行う非PostSharpバージョンとわずか数ナノ秒の違いになりました. 私には、これは不可能です。私のテストに何か問題があるに違いない。私は同僚にコードを査読してもらったので、コードが意図したとおりに機能することをかなり確信しています。

では、ベンチマークの実行速度の遅いシミュレーションとして文字列生成 (意図したアプリケーションで予想される用途) を使用することに何か問題があるのでしょうか?

または、他の誰かが PostSharp のランタイム パフォーマンス分析を実行した (または知っている) ことはありますか?

ありがとうございました。

4

3 に答える 3

1

3 GHz のプロセッサでは、400 億クロック サイクルだけで 13 秒かかります。あなたのテストには間違いなく何か問題があります。

何かが最適化されている可能性があります。おそらく、同じことを何度も繰り返していることがわかり、まったく実行しないことを決定している可能性があります (最初の場合を除く)。パフォーマンス分析を行うときは、データをランダム化していることを確認する必要があります。

于 2010-01-19T00:49:05.367 に答える
1

パフォーマンステストを行いました。PostSharp ブログに掲載されました

一部の側面は、リフレクション、メソッド パラメーターへのアクセス、メソッド インスタンスへのアクセスなどの機能を使用しない場合、手書きコードと同じパフォーマンスを持つことができます。PostSharp は MSIL 命令を発行するため、生成されたコードは JIT コンパイラによってインライン化できます。

他の回答で思い出したように、(1) PostSharp が実際に呼び出されている (結果のアセンブリで Reflector を使用している) こと、および (2) ストップウォッチを適切に使用していることを確認してください。1 回のテストの平均時間を比較する場合、PostSharp と手書きコードの差がわずか数ナノ秒であることは正常です (高価な機能を使用しないという仮定で)。

于 2010-01-19T07:19:40.417 に答える
0

生成された文字列が次の反復 (コンソールに書き込まれる文字列の長さ) で使用されるように、テストを変更できますか? おそらく、コンパイラは、ポストシャープ関数がまったく実行されないか、非同期で呼び出されるか、別の cpu で実行されるようにプログラムを最適化します。これは、他の反復と同期する理由がないためです。より緊密にリンクすると、コンパイラがアクションを同期するように強制される場合があります。

于 2010-01-19T07:25:11.600 に答える