2013-02-27 5 views
7

Ich habe den folgenden Code, und es scheint die verstrichene Millisekunden sind ungenau:Mess C#/Async Datenzugriff über Stopwatch Klasse

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(); 
    } 

Ist dies richtig aussehen, oder bin ich etwas schmerzhaft offensichtlich fehlt?

+1

Es sieht nicht gut aus. Warum folgern Sie, dass es ungenau ist? FYI, sehr kurze Timings können mit dieser Technik nicht genau gemessen werden; Überprüfen Sie das Feld "Stoppuhr.Frequenz". –

+0

Sieht auch gut aus für mich. Habe gerade einen kleinen Test gemacht (https://dotnetfiddle.net/wLzfor), um zu sehen, ob Async aus irgendeinem Grund mit der Stoppuhr fummelte, aber das tut es nicht. – Jcl

+0

(funktioniert auch mit 'ConfigureAwait (false)') – Jcl

Antwort

0

das sieht für mich vollkommen okay aus.

Ein möglicher Fehler wäre, wenn die Repository.GetAll Methode nicht ASYNC ist, hoffentlich hat es eine Signatur wie so: mir

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

Ich glaube nicht, dass es ohne eine asynchrone Methode Signatur kompilieren würde – Jcl