2013-07-05 2 views
9

asp.net 웹 API 프로젝트에서 미니 프로파일 러를 사용하고 있으며 사용자 정의 DelegatingHandler에서 실행되는 일부 코드의 성능을 추적하려고합니다.System.Net.Http.DelegatingHandler에서 MiniProfiler.Current가 호출되면 null입니다.

DelegatingHandler 안에있는 MiniProfiler.Current.Step()은 결과에 표시되지 않습니다. 같은 프로젝트에있는 다른 전화가 괜찮습니다.

MiniProfiler.CurrentWebRequestProfilerProvider에서 HttpContext.Current으로부터 검색된 것으로 밝혀졌다. DelegatingHandler에서 호출하면 HttpContext.Current이 null입니다.

처리기 내에서 작동하도록 MiniProfiler.Current를 검색하는 더 좋은 방법이 있습니까?

+1

어쩌면 이것이 당신의 질문에 대한 대답 -. HttpCache에, 그것은 두 번째 옵션에

주 이동합니다.? [MvcMiniProfiler가 작동하려면 웹 응용 프로그램이 필요합니까, 아니면 단위 테스트와 같이 순수 라이브러리에서 사용할 수 있습니까?] [1] [1] : http://stackoverflow.com/questions/8526609/does-mvcminiprofiler-require-a-web-application-to-work-or-can-it-be-used-in- pur –

답변

3

미니 프로 파일러 타이밍은 기본적으로 HttpContext.Current에 저장됩니다 (발견 한대로). 따라서 HttpContxt.Current이 null 인 곳에서 MiniProfiler를 호출하면 결과를 저장할 수 없습니다. 해결책은 다른 곳에서 결과를 저장 (및 검색)하는 것입니다.

MiniProfiler는 모든 결과를 저장하고 검색 할 위치를 (MiniProfiler.Settings.Storage을 사용하여) 변경하는 옵션 옵션을 제공합니다. new v3 MiniProfiler (beta nuget here)은 각 요청마다 서로 다른 IStorage을 구성하고 결과를 저장하고 검색 할 수있는 여러 위치를 지정하기 위해 MultiStorageProvider을 사용할 수있는 옵션을 제공합니다. github의 Sample.Mvc 프로젝트에서 예제를 볼 수 있습니다. 귀하의 경우에는

는 가장 좋은 방법은 첫째 HttpRuntimeCacheStorage에서 검색/저장합니다 다음 나중에 DelegatingHandler에서 액세스 할 수있는 다른 IStorage를 사용하는 글로벌 MiniProfiler.Settings.Storage에 대한 MultiStorageProvider을 설정할 수 있습니다. 그런 다음 DelegatingHandler에서 MultiStorageProvider에 설정 한 두 번째 저장 옵션 만 사용하려면 MiniProfiler.Current.Storage을 설정하십시오 (HttpCache를 저장하려고하면 무의미하므로). 이 경우 DelegatingHandler의 프로필은 두 번째 저장 옵션에 저장되며 다른 결과가 표시되도록보기 위해 검색됩니다 (MultiStorageProviderLoad이 결과를 얻을 수있는 첫 번째 장소에서 발생 함). 결과를 찾지 못하면 여러 스토리지 옵션을 가진 것은이 경우에 유용하지만, 검색 프로파일의 성능에 부정적인 영향을 미칠 수

관련 문제