2013-04-16 3 views
7

최근에 WebAPI 백엔드를 사용하여 기존 ASP.NET MVC 2 응용 프로그램을 MVC 4로 변환했습니다. 불행히도 WebAPI와 관련하여 심각한 성능 문제가 있음을 알고 있습니다.WebAPI 성능이 좋지 않음

MiniProfiler 설정이 있는데 병목을 식별 할 수 있는지 알아보기 위해 몇 가지 단계가 추가되었습니다. 놀랍게도 데이터베이스가 아닙니다. 변환하기 전에 이와 같은 요청은 ~ 50ms보다 오래 걸리지 않으므로이 간단한 요청이 2 초 이상 걸리는 것을 보는 것은 다소 충격적입니다.

enter image description here

이상한 부분이 모두가 SQL이 자신을 호출에 요청 심지어 그것을 만드는 전에 대기 시간의 대부분이 발생하는 것입니다.

MiniProfiler를 WebAPI의 호출에 더 깊이 묶어서 실제로 실제로 무엇이 진행되고 있는지 더 자세히 조사 할 수있는 방법이 있는지 궁금합니다. 어떤 도움이라도 대단히 감사하겠습니다.

[HttpGet] 
public bool AssetExistsById(string assetId) { 
    using (Current.Profiler.Step("WebAPI Call To Model")) { 
     return Asset.AssetExists(assetId); 
    } 
} 

자산 모델 :

public static bool AssetExists(string assetId) { 
    using (Current.Profiler.Step("WCF call to DataAccess lib")) { 
     return WcfEndPoint.AssetExists(assetId); 
    } 
} 

감사

FWIW, 여기에 요청

WebAPI 컨트롤러에 사용되는 코드입니다!

그래서 내가 여기에 무슨 일이 있었는지 알게 업데이트 ... 내가 시스템 진단 추적 내 App_Start/WebApiConfig.cs 파일에 사용할 수 있다고 밝혀졌습니다. 나는 다음 줄을 무작위로 주석 처리했으며 모든 것이 수정되었다.

config.EnableSystemDiagnosticsTracing(); 

다른 사람들에게 도움이되기를 바랍니다.

+2

VS 프로파일을 사용하여 시간이 많이 걸리는 것을 확인해 보셨습니까? –

+0

로드 시간을 테스트하기 위해 웹 응용 프로그램 내에 정적 페이지/이미지가 있습니까? 네트워크/서버 관련 일 수 있습니다. –

+0

@YoussefMoussaoui 응답 해 주셔서 감사합니다! 프로파일 러를 실제로 돌렸지 만, 내 요청이 왜 그렇게 오래 걸리는지에 대해 특별히 흥미로운 것을 찾지 못했습니다 ... 가장 긴 부분은 요청 라우팅 이었지만 상대적으로 짧았습니다. 아마도 잘못된 프로파일 러를 사용하고 있습니까? 도움이된다면 VS2012를 사용하고 있습니다. –

답변

7

그래서 나는 여기에서 무슨 일이 일어나고 있는지 알아 냈습니다 ... 내 App_Start/WebApiConfig.cs 파일에서 시스템 진단 추적을 사용할 수있게되었습니다. 나는 다음 줄을 무작위로 주석 처리했으며 모든 것이 수정되었다.

config.EnableSystemDiagnosticsTracing(); 

다른 사람들에게 도움이되기를 바랍니다.

+0

나는 이것을 4 시간 전에 보았 더라면 좋겠다! 나는이 정확한 문제를 겪었고 그 해결책을 똑같은 방식으로 발견했다. :) 흥미롭게도 Azure에 배포 할 때 성능이 저하되는 것을 보았습니다. 로컬에서 실행하면 응용 프로그램이 정상적으로 보였습니다. –

+0

그래, 나는 실제로 몇 주 전에 다른 진단 주자들과 함께 돌아 다니면서 이번에는 대기 시간 문제를 발견하지 못했다. 흥미 롭지만 Azure에 배포 한 후에 만 ​​문제를 보았습니다! Release vs Debug를 실행할 때 진단 추적을 사용하는 데 문제가 있습니까? –

+0

내가 언급 한 Azure 인스턴스는 지속적인 배포 및 통합 테스트의 대상입니다. 빌드의 디버그 버전을 실행 중입니다. –