.net Visual Studio评测异步方法,包括实际等待时间
我们正试图分析一些WCF web服务的性能,这些服务大量使用async/await 我发现,对于VisualStudio的2012检测分析模式,等待其他异步方法所花费的时间并没有累积到其包含的持续时间中。从技术上讲,如果线程实际上不再卡在方法执行中,我想这是有意义的。但这实际上意味着很难深入研究速度较慢的实际方法 例如,下面的示例中,演示主方法TestConcurrencyProfiling()在探查器看来非常快,而实际上,它在等待所有子任务时陷入了困境,据报道,这些子任务本身很快,但在等待时陷入了困境 我确信,应该有某种我没有意识到的方法来捕捉这些方法的真正开始-结束时间.net Visual Studio评测异步方法,包括实际等待时间,.net,visual-studio-2012,profiling,async-await,.net,Visual Studio 2012,Profiling,Async Await,我们正试图分析一些WCF web服务的性能,这些服务大量使用async/await 我发现,对于VisualStudio的2012检测分析模式,等待其他异步方法所花费的时间并没有累积到其包含的持续时间中。从技术上讲,如果线程实际上不再卡在方法执行中,我想这是有意义的。但这实际上意味着很难深入研究速度较慢的实际方法 例如,下面的示例中,演示主方法TestConcurrencyProfiling()在探查器看来非常快,而实际上,它在等待所有子任务时陷入了困境,据报道,这些子任务本身很快,但在等待时陷
public async Task<string> TestConcurrencyProfiling()
{
var numberTasks = new List<Task<int>>();
var rnd = new Random();
var counter = 0;
while (counter < 5)
{
numberTasks.Add(this.DelayRandomNumber(rnd));
counter++;
}
await Task.WhenAll(numberTasks);
string result = string.Empty;
foreach (var task in numberTasks)
{
result += task.Result.ToString() + ";";
}
return result;
}
private async Task<int> DelayRandomNumber(Random rnd)
{
var delay = rnd.Next(1, 4) * 1000;
await Task.Delay(delay);
return delay;
}
public异步任务TestConcurrencyProfiling()
{
var numberTasks=新列表();
var rnd=新随机数();
var计数器=0;
while(计数器<5)
{
numberTasks.Add(此.DelayRandomNumber(rnd));
计数器++;
}
等待任务。WhenAll(numberTasks);
字符串结果=string.Empty;
foreach(numberTasks中的var任务)
{
结果+=task.result.ToString()+“;”;
}
返回结果;
}
专用异步任务DelayRandomNumber(随机rnd)
{
var延迟=rnd。下一个(1,4)*1000;
等待任务。延迟(延迟);
返回延迟;
}
就我目前所见,只有红门的蚂蚁模型支持这种类型的“挂钟”计时
async
工具仍在追赶。也许有办法找到这些数据,但我不一定期望有办法。微软团队最有可能回答这个问题,但他们并没有坚持下去;相反,你可以问我。哇,真的吗?探查器无法在调用方方法中累积等待项?:-(这被称为“CPU评测”,这意味着每当线程被阻塞时评测器都会休眠。哦,是的!!我听说redgate评测能够测量这一点。谢谢提醒。