あなたが説明したものと非常によく似たものを探していました。そのようなフレームワークが見つからなかったので、自分で作成しました。これは非常にシンプルですが、シンプルであることが良い場合もあります。
ベンチマークが単体テストに対応していると説明します。概念は、速度を測定または比較するためにコードのセクションを分離することです。
属性の使用法の典型的な例は次のようになります。
[ProfileClass]
public class ForEachLoopBenchmarks
{
[ProfileMethod]
public void ForLoopBenchmark()
{
List<int> list = GetNumberList();
for (int i = 0; i < list.Count; i++)
{
}
}
[ProfileMethod]
public void ForEachLoopBenchmark()
{
List<int> list = GetNumberList();
foreach (int i in list)
{
}
}
private List<int> GetNumberList()
{
List<int> list = new List<int>();
for (int i = 0; i < 1000; i++)
{
list.Add(i);
}
return list;
}
}
次に、コンソール アプリを作成し、以下のコードをMainメソッドに貼り付けて、前述の属性で装飾されたクラスを含むアセンブリへの参照を追加します。各メソッドの実行時間 (1000 回実行) がコンソールに出力されます。
class Program
{
static void Main(string[] args)
{
ProfileRunner rp = new ProfileRunner();
rp.Run();
}
}
コンソール出力は次のようになります。

pUnit.dllの参照をコンソール アプリケーションと、属性でマークされたメソッドを含むクラス ライブラリに追加する必要があります。
これはNuget hereからパッケージとして入手できます。
Nuget コマンド: PM> Install-Package pUnit
完全なソース コードが必要な場合は、こちらのGithub で見つけることができます。
この質問の実行時間を実際に測定する方法に基づいています: https://stackoverflow.com/a/1048708/1139752
実装については、次のブログ投稿で詳しく説明します。