2017-08-28 3 views
1

BenchmarkDotNetを使用して、さまざまなプロジェクト内のいくつかのメソッドをテストします。ベンチマーク方法.Netクラスは外部コードから開始

属性にBenchmark属性を追加するのと同じくらい簡単かもしれないので、私が取り組んでいるプロジェクトでそれを使用することにかなりの疑念があります。

プロジェクトは2部からなるれる:

  • ネイティブコア
  • .NETはネイティブ部分は、.NET部を初期化し、そのメソッド相互運用介し呼び出し

を特徴とします。

テストプロジェクトを使用し、.Netプロジェクトへの参照を追加してベンチマークアプリケーションを開始すると、ネイティブコードを最初に開始する必要があります。

私は何とかネイティブの部分をスキップして、どうすればいいのですか?BenchmarkDotNetテスト方法のみ?あるいは別のベンチマーキング手法を探すべきでしょうか?

答えて

0

BenchmarkDotNetの仕様を見ると、どのメソッドもベンチマークとしてマークすることができます。ネイティブアプリが呼び出す実際のメソッドである必要はありません。 単体テストと同様に、.NETコードのメソッドを呼び出すベンチマークを、ネイティブコアから取得した有効なパラメータで記述することができます。

私は、あなたが別々のテストプロジェクトをどのように持っているかに似た別のベンチマークプロジェクトを作成することをお勧めします。

+0

interopcodeの有効な使用と.NETの初期化のオーバーヘッドを測定することが重要ですので、私は作成することで、ネイティブの一部をシミュレートすることはできません.Netプロジェクト。そのため、BenchmarkDotNetがネイティブの部分をスキップし、.Netの部分が起動するときの計測を開始する予定です。 – Nestor

1
  • 新しいパブリッククラスを作成し、ベンチマーク方式を作成し、測定したいものを呼び出します。 [Benchmark]属性でマークしてください。

それは(多くのベンチマークの反復のために)一度初期化コードを実行するのに十分だ場合:

  • 、新しいメソッドを作成し、初期化を実施し、BenchmarkDotNetを作成しようとしている[GlobalSetup]属性
  • でマークあなたのクラスの新しいインスタンスは、セットアップメソッドを一度呼び出すと、その後、あなたのコードのベンチマークを開始します。

それは一度初期化を実行するのに十分ではないですし、毎回の前にベンチマークメソッド呼び出しと呼ばれるように必要なの場合:

  • は、新しいメソッドを作成し、初期化を実施し、[IterationSetup]属性でマーク。実行戦略をRunStrategy.Monitoringに設定します。
  • BenchmarkDotNetは、クラスの新しいインスタンスを作成し、ベンチマークを呼び出す前にsetupメソッドを1回呼び出して何度も繰り返します。

あなたにはセットアップとクリーンアップの詳細を読むことができ、当社のofficial docs

+0

残念ながら、認証、パラメータのinitなどを処理する際に、ネイティブ部分を除いた初期化を正しく設定できません。だから、私は属性を使うべきで、.Netコードが始まるときにはパフォーマンスを記録するべきです。 BenchmarkDotNetを使用することが可能かどうか疑問です。 – Nestor

+0

@Nestor残念ながら、それは不可能です。それを測定するにはプロファイラが必要です。 –

関連する問題