2013-02-27 23 views
7

Tôi có đoạn code sau và có vẻ như đã qua mili giây là không chính xác:Đo C#/Async Data Access Sử dụng StopWatch Lớp

public async Task<ActionResult> Index() 
    { 
     try 
     { 
      var connString = RoleEnvironment.IsEmulated 
           ? ConfigurationManager.ConnectionStrings["Poc"].ConnectionString 
           : ConfigurationManager.ConnectionStrings["PocVm"].ConnectionString; 

      var repository = new AccountRepository(connString); 
      var stopWatch = new Stopwatch(); 
      stopWatch.Start(); 

      var accounts = await repository.GetAll(); 

      stopWatch.Stop(); 
      ViewBag.Accounts = accounts; 
      ViewBag.VmStatus = stopWatch.ElapsedMilliseconds; 
     } 
     catch (Exception e) 
     { 
      blah blah blah... 
     } 


     return View(); 
    } 

Điều này trông đúng hay tôi thiếu một cái gì đó đau đớn rõ ràng?

+1

Có vẻ OK với tôi. Tại sao bạn kết luận nó không chính xác? FYI, thời gian rất ngắn không thể được đo chính xác bằng cách sử dụng kỹ thuật này; kiểm tra trường 'Stopwatch.Frequency'. –

+0

Cũng ổn với tôi. Chỉ cần thực hiện một thử nghiệm nhỏ (https://dotnetfiddle.net/wLzfor) để xem nếu async fiddled với đồng hồ bấm giờ vì lý do nào, nhưng nó không. – Jcl

+0

(hoạt động ngay cả khi sử dụng 'ConfigureAwait (false)') – Jcl

Trả lời

0

điều này có vẻ hoàn toàn ổn với tôi.

Một lỗi tiềm năng sẽ là nếu phương pháp Repository.GetAll không async, hy vọng nó có một chữ ký như vậy:

public async Task<IEnumerable<Account>> GetAll(); 
+1

Tôi không nghĩ rằng nó sẽ biên dịch mà không có chữ ký phương thức không đồng bộ – Jcl

Các vấn đề liên quan