2015-06-14 51 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來用您自己的方法替換任何內部呼叫。