2013-02-08 14 views
5

Yalnızca bir görünüm döndürürsem, Görev'den döndürmek için performans farklılığı var mı?Görev <ViewResult> ile ViewResult Arasındaki Fark

[HttpGet] 
public Task<ViewResult> Index() 
{ 
    return Task.FromResult(View()); 
} 

[HttpGet] 
public ViewResult Index() 
{ 
    return View(); 
} 
+0

bu http://www.tugberkugurlu.com/archive/asynchronous-database-calls-with-task-based-asynchronous-programming-model-tap-in-asp-net-mvc-4 ve bu http: //codeclimber.net.nz/archive/2012/01/09/evolution-of-async-controller-asp-net-mvc.aspx –

cevap

3

Sizin durumunuzda, Task sürümü muhtemelen daha yavaş olacaktır, çünkü sadece Task ek yükünü bir fayda olmadan ekliyorsunuz. Task döndürüldüğünde, async - await'dan yararlanabileceğiniz zaman, yani yönteminizde eşzamanlı olmayan bir eylem gerçekleştiriyorsanız, mantıklıdır.

1

Asenkron eylem standart senkron eylem daha daha hızlı gerçekleştirmez; Sadece sunucu kaynaklarının daha verimli kullanılmasına izin verir. Bir eylemi, bir seferde birkaç senkronize olmayan işlem yapmak istediğinde, eşzamansız kodun en büyük yararlarından biri olan bir görülebilir.

Professional ASP.NET MVC 4

adlı kitabından bu bilgileri Ayrıca zaman kullanıcıya yanıt için gerekli böylece aramaları sırayla gerçekleştirilir olduğunu

public class PortalController : Controller { 
    public ActionResult Index(string city) { 
     NewsService newsService = new NewsService(); 
     WeatherService weatherService = new WeatherService(); 
     SportsService sportsService = new SportsService(); 
     PortalViewModel model = new PortalViewModel { 
      News = newsService.GetNews(city), 
      Weather = weatherService.GetWeather(city), 
      Sports = sportsService.GetScores(city) 
     }; 
     return View(model); 
    } 
} 

Not Bu konu hakkında bir örnek vardır her bir bireysel çağrı yapmak için gerekli sürelerin toplamına eşittir. Çağrılar 200, 300 ve 400 milisaniyeyse (ms) ise, toplam eylem yürütme süresi 900 ms'dir (artı bazı belirsiz ek yükler). Benzer şekilde

aşağıdaki formu alacağını eylemin bir zaman uyumsuz sürümü: operasyonlar tüm paralel olarak başladı ki

public class PortalController : Controller { 
    public async Task<ActionResult> Index(string city) { 
     NewsService newsService = new NewsService(); 
     WeatherService weatherService = new WeatherService(); 
     SportsService sportsService = new SportsService(); 
     var newsTask = newsService.GetNewsAsync(city); 
     var weatherTask = weatherService.GetWeatherAsync(city); 
     var sportsTask = sportsService.GetScoresAsync(city); 
     await Task.WhenAll(newsTask, weatherTask, sportsTask); 
     PortalViewModel model = new PortalViewModel { 
      News = newsTask.Result, 
      Weather = weatherTask.Result, 
      Sports = sportsTask.Result 
     }; 
     return View(model); 
    } 
} 

Not, bu nedenle kullanıcıya yanıt için gereken süreyi için eşittir En uzun bireysel görüşme zamanı. Çağrılar 200, 300 ve 400 ms ise, o zaman toplam eylem yürütme süresi 400 ms'dir (artı bazı belirsiz ek yükler).