いくつかの同様のメソッド呼び出しのパフォーマンスをテストしていますが、いくつかのタイミングとロギングステートメントでラップしています。これらのメソッドをAction delegateパラメータで渡しています。アクションデリゲートの呼び出しの名前/詳細を取得するにはどうすればよいですか?
通話に関する詳細を印刷する方法はありますか?
var httpResult = TestService(() => serviceHttp.Search(criteria));
var tcpResult = TestService(() => serviceTcp.Search(criteria));
var localResult = TestService(() => servicelocal.Search(criteria));
...
private static double TestService(Action serviceOperation)
{
const int iterations = 15;
...
for (var i = 0; i < iterations; i++)
{
var watch = Stopwatch.StartNew();
...
Console.WriteLine(string.Format("{0} ElapsedMilliseconds={1}", ????, watch.ElapsedMilliseconds));
// Ideally this would print something like "serviceTcp.DoStuff(...) ElapsedMilliseconds=313"
}
...
}
私はあなたが表現オブジェクトとして扱う場合は、あなたが引き出すことができます知っていますいくつかの情報。参照してください:http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression –
うーん..あなたはserviceOperationのタイプを変更する必要があります。アクション(デリゲート)を式ツリーに変換することはできません。 – Strillo
少なくとも、ここでは 'Action'デリゲートを使いたいと思うでしょう。今は、呼び出し側にコンテキストを提供させるのが簡単です。 –