使用异步代码测量cpu密集时间

时间:2015-06-14 14:07:26

标签: c# performance measurement

我们希望将部分应用程序外包给外部公司。这些组件向外部网站发出异步请求,并使用html解析器或正则表达式处理内容。

async Task Do()
{
   var webContent = await Get("http://...");
   var match = Regex.Match(webContent);

   if (IsXXX(match))
   {
       webContent = await Get("http://other...");
   }
}

每个组件都不同,有些只做一个请求,有些则做得更多。我们希望确保CPU密集型部件(Regex,Parsing)不会超过100毫秒,并希望在质量保证管道中作为第一步自动测试它。有没有办法在没有等待Web请求的情况下测量性能?

我目前只看到两种解决方案,但想知道是否有更好的方法:

  1. 为Web请求提供包装并测量等待时间。然后用简单的秒表测量时间并减去等待时间。使用生成的客户端类时很难进行soap调用。
  2. 实施自定义同步上下文并在此处测量时间。
  3. 是否有一些内置解决方案?

1 个答案:

答案 0 :(得分:1)

模拟IO绑定的Web请求,以立即返回一个HTML字符串,该字符串将采用类似的CPU进行处理。例如。使用return Task.FromResult(XXX)来获取已完成的任务。然后测量整个方法。

请注意,您可以使用Microsoft Fakes用您自己的方法替换任何内部呼叫。