2014-02-20 32 views
1

我們試圖剖析一些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; 
    } 
+1

「異步」工具仍在追趕。有*可能*是一種方法來查找這些數據,但我不一定期望有*方法。微軟的團隊很可能適合回答這個問題,他們不會停留在SO上;請在[MSDN論壇]上(http://social.msdn.microsoft.com/Forums/zh-CN/home?forum=parallelextensions)詢問。 –

+0

哇真的嗎?分析器不能在調用方法內累加awaitables? :-( – icelava

+1

這給了光榮的名字「CPU分析」,這意味着分析器會在線程被阻塞時進入休眠狀態。[*我使用這種方法。*](http://stackoverflow.com/a/378024/23771 ) –

回答