Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Visual Studio评测异步方法,包括实际等待时间_.net_Visual Studio 2012_Profiling_Async Await - Fatal编程技术网

.net Visual Studio评测异步方法,包括实际等待时间

.net Visual Studio评测异步方法,包括实际等待时间,.net,visual-studio-2012,profiling,async-await,.net,Visual Studio 2012,Profiling,Async Await,我们正试图分析一些WCF web服务的性能,这些服务大量使用async/await 我发现,对于VisualStudio的2012检测分析模式,等待其他异步方法所花费的时间并没有累积到其包含的持续时间中。从技术上讲,如果线程实际上不再卡在方法执行中,我想这是有意义的。但这实际上意味着很难深入研究速度较慢的实际方法 例如,下面的示例中,演示主方法TestConcurrencyProfiling()在探查器看来非常快,而实际上,它在等待所有子任务时陷入了困境,据报道,这些子任务本身很快,但在等待时陷

我们正试图分析一些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评测能够测量这一点。谢谢提醒。