2015-06-14 46 views
2

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

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

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

每个组件都不同,有的只做一个请求,有的做更多。我们希望确保CPU密集型部分(正则表达式,解析)不超过100毫秒,并且希望在质量保证管道中作为第一步自动进行测试。有没有一种方法可以在没有等待Web请求的时间的情况下衡量性能?

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

  1. 提供对Web请求的包装和测量的等待时间。然后用简单的秒表测量时间并减去等待时间。使用生成的客户端类时,很难进行肥皂调用。
  2. 实现自定义同步上下文并在此处测量时间。

是否有一些内建解决方案?

+0

如果外部公司要为您提供IO和CPU绑定调用,则需要告诉他们您希望能够独立地测试每个这些调用。 –

+0

难道你不能只是围绕Regex.Match调用包裹一个秒表吗?让'做'测量自己并向呼叫者报告性能。 – usr

+0

@Yuval:我们希望保持简单,以低成本的方式实现流程(我们是一家没有外部资金的创业公司)。组件由接口定义,我们为整个方法调用生成集成测试。唯一缺少的是CPU性能。 – SebastianStehle

回答

1

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

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