2013-02-08 2 views
5

보기 만 반환하면 작업에서 반환 할 성능 diffrence가 있습니까?작업의 차이점 <ViewResult>과 ViewResult

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

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

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

답변

3

Task 오버 헤드를 추가하기 때문에 Task 버전의 속도가 느려질 수 있습니다. Task을 반환하면 async - await을 활용할 수 있습니다. 즉, 실제로 메서드에서 비동기 적으로 수행 할 수있는 작업을 수행하는 경우에 유용합니다.

1

비동기 작업을 표준 동기 작업을보다 빨리 수행하지 않습니다; 서버 자원을보다 효율적으로 사용할 수 있습니다. 액션이 한 번에 여러 비동기 작업을 수행하려고 할 때 비동기 코드의 가장 큰 이점 중 하나가 표시 될 수 있습니다.

Professional ASP.NET MVC 4

라는 책에서이 정보는 또한 시간이 사용자에게 응답 할 필요가 있도록 호출이 순차적으로 수행되는 것을

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

참고이 항목에 대한 예제가있다 각 개별 전화를 걸기 위해 필요한 시간의 합계와 같습니다. 호출이 200, 300 및 400 밀리 초 (ms) 인 경우 총 작업 실행 시간은 900 밀리 초 (약간의 경미한 플러스 오버 헤드)입니다. 마찬가지로

, 다음과 같은 형태로 수행하게 작용의 비동기 버전 : 작업이 모두 병렬로 쫓겨 것을

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

참고하므로 사용자에 응답하는 데 필요한 시간은에 같다 가장 긴 개별 통화 시간. 호출이 200, 300 및 400 ms 인 경우 전체 실행 실행 시간은 400 ms입니다 (약간의 경미한 오버 헤드가 있음).