1

私はサードパーティのライブラリと、このライブラリのパフォーマンスをテストするために自分で書いた簡単なベンチマーク テストを持っています。サードパーティ ライブラリは C++/CLI .NET ライブラリであり、そこにあるほとんどのコードは管理されていません。このライブラリは、.NET Framework 2.0 用にアセンブルされています。私のベンチマーク テストは、ライブラリにオーバーヘッドをほとんど追加しない管理された C# コードであり、メソッドへの単純な呼び出し、イベント ハンドラーへのサブスクリプション、接続のクローズ/オープンなどのみを追加します。ライブラリは、複数の作業スレッドでいくつかの操作を実行し、ソケットも処理します。

奇妙なことに、VS 2005 でベンチマーク テストを行った場合と、VS 2008 で同じことを行った場合では、異なるパフォーマンス値が得られました (VS 2008 の方が 10% 優れています)。

すべてのコードが .NET 2.0 機能のみを使用し、3.5 の言語/機能またはライブラリが使用されていない場合、パフォーマンスが向上する原因は何ですか。私のベンチマーク プロジェクトは System.dll とサード パーティの dll のみを参照しており、ベンチマーク コードは VS2005 と VS2008 プロジェクトでまったく同じですか?

4

1 に答える 1

2

2.0 の機能 (言語? ライブラリ?) のみを使用している場合でも、3.5 JIT が単にコードを最適化するか、一部のライブラリがより最適化されている可能性があります。

言い換えれば、2.0 関数のインターフェースは同じ下位互換性のままですが、実装の場合はそうである必要はありません。私はGCを想定しています(そしてそのロックも常に微調整されています)

違いの原因を正確に把握することは非常に困難です。いくつかのプリミティブ関数 (memmove、mem 内のバイト/ワードの検索など) を最新の CPU 用に最適化するのと同じくらい簡単です。

于 2009-07-17T13:30:25.923 に答える