1

パフォーマンスが非常に重要であることがわかった、一般的に使用されるいくつかのメソッドを作成しました。顕著なパフォーマンスのバグを修正するためにいくつかの変更を行った後、いくつかのテストを実施して、将来の変更によってパフォーマンスが低下しないことを確認したいと思います。ただし、これらのテストはしばしば非常に不安定であることがわかりました (ガベージ コレクション、自動テスト サーバーでのその他のアクティビティなどが原因である可能性があります)。私が疑問に思っているのは、これらの種類のテストを作成および維持するための受け入れられたベスト プラクティスがあるかということです。

これまでのところ、私のテストのほとんどは次のようになっています。

runMyCode(); // for assembly loading/jitting
var sw = Stopwatch.StartNew();
for (iterations) { runMyCode(); }
var time = sw.Elapsed;

// then either
Assert.Less(time, TimeSpan.FromSeconds(some reasonably generous amount of time));
// or
// time some other piece of benchmark code (e. g. a framework method 
// which runMyCode() layers on top of). And do:
Assert.Less(time.TotalSeconds, someMultiplier * benchmarkTime.TotalSeconds);

安定性を改善しなければならない 1 つの考えは、テスト ストアがデータベースに時間を記録し、最後の N 回がベンチマークに失敗した場合にのみ失敗することです。

4

2 に答える 2

1

Visual Studio を使用しているか mono 開発を使用しているかはわかりませんが、次のような速度プロファイラー ツールを使用できます。

RedGate: http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/?utm_source=google&utm_medium=cpc&utm_content=unmet_need&utm_campaign=antsperformanceprofiler&gclid=CPfS1Z_k1bkCFYuk4Aoda3oAVg

または、デフォルトのビジュアル スタジオ パフォーマンス プロファイラーを使用します。このチュートリアルを参照してください: http://msdn.microsoft.com/en-us/library/ms182372.aspx (インターネット上でさらに多くの情報)。

于 2013-09-18T20:31:04.613 に答える