我测试了一些类似的方法调用性能,我在一些时间和日志记录语句正在包装。我通过Action delegate参数传递这些方法。我怎样才能得到一个Action委托调用的名称/细节?
有没有办法打印有关通话的细节?
例如:
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的类型。将Action(委托)转换为Expression树是不可能的。 – Strillo
显然你至少要在这里使用'Action'委托,现在调用者提供上下文很简单。 –