我們試圖剖析一些WCF Web服務的性能,這些Web服務大量使用async/await。Visual Studio剖析異步方法,包括實際等待時間
我發現,對於Visual Studio的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;
}
「異步」工具仍在追趕。有*可能*是一種方法來查找這些數據,但我不一定期望有*方法。微軟的團隊很可能適合回答這個問題,他們不會停留在SO上;請在[MSDN論壇]上(http://social.msdn.microsoft.com/Forums/zh-CN/home?forum=parallelextensions)詢問。 –
哇真的嗎?分析器不能在調用方法內累加awaitables? :-( – icelava
這給了光榮的名字「CPU分析」,這意味着分析器會在線程被阻塞時進入休眠狀態。[*我使用這種方法。*](http://stackoverflow.com/a/378024/23771 ) –