2014-09-27 4 views
0

우리는 Windsor Castle을 수년간 사용하고있는 큰 웹 응용 프로그램을 보유하고 있습니다. 이 응용 프로그램에는 370 개 이상의 서비스에 대해 약 700 개의 구성 요소 등록이 있습니다. 거의 모든 것들은 루트, 즉 진입 점 컨트롤러에 속합니다. 웹 요청이 오면 엔트리 컨트롤러를 해결하고 요청을 처리하게합니다. 문제는 루트 구성 요소를 해결하는 데 약 35 밀리 초가 걸린다는 것입니다. 나는 그것이 나에게 상당히 많이 들린다 고 말할 것이다.Windsor castle 3.2 해결 성능

내 질문에 위의 숫자가 정상적으로 들리는가? 누구든지 시간을 개선하기 위해 내가 할 수있는 것에 대한 힌트를 떨어 뜨릴 수 있습니까? 아니면 내가 뭐 잘못하고 있는지 확인해 볼까?

당신을 :) 감사

은 객체 그래프는 다음과 같은 요인의 많은에 따라 해결하는 데 걸리는 시간이 얼마나
+0

어떻게 측정 했습니까? RELEASE 모드에서 컴파일 된 동안 이것을 벤치마킹 해 보았고 디버거 외부에서 실행 했습니까? – Steven

+0

예, StopWatch를 사용하여 로그를 확인하고 경과 시간을 기록하는 데 필요한 시간을 측정했습니다. 릴리즈 모드와 디버거 외부. – Thuan

답변

2

:

  • 객체 그래프의 크기
  • 등록 된 생활 양식 구성 요소 및 그래프에서 이러한 라이프 스타일의 위치 (명백히 루트 객체가 싱글 톤 인 경우 분명히 해결은 실제로 빠릅니다.)
  • 생성자에서 수행 한 작업량

추가 정보가 없으므로 그다지 말할 것도 없습니다. 그러나 나는 35ms라고 말할 것이다. 캐슬 윈저 (Castle Windsor)조차도 꽤 많이 있습니다. 7 개의 가장 많이 사용되는 DI 컨테이너에 대해 작은 벤치 마크를 실행하면서 881 개의 과도기 구성 요소의 개체 그래프를 분석했으며 가장 빠른 컨테이너 (Simple Injector)가 0.01 ms (내 컴퓨터에서)를 해결하기 위해 가장 느린 컨테이너 (Ninject) 그래프.

Container  | ms. 
----------------+----- 
Simple Injector | 0.01 
StructureMap | 0.50 
Autofac   | 0.77 
Unity   | 1.04 
Castle Windsor | 3.96 
Ninject   | 5.03 

이 벤치 마크에서 나는 35ms라고 말합니다. 캐슬 윈저 (Castle Windsor)에서 그 크기의 객체 그래프를 해결하기에는 다소 느립니다. 따라서 your injection constructors are simple을 확인하고 null을 확인하고 들어오는 종속성을 저장하는 것 이상을 수행하지 않아야합니다. 이렇게하면 compose your object graphs with confidence 수 있습니다.

btw보다 광범위한 벤치 마크 here을 찾을 수 있습니다.

+0

감사합니다 :) 정말로 당신의 대답은 나에게 유용한 힌트를줍니다. 내 코드베이스를 확인하고 나중에 다시 얻습니다. – Thuan

+0

일부 구성 요소는 Entity Framework의 객체 컨텍스트를 만들어야합니다. 우리는 또한 더 많은 밀리 초를 추가하는 모든 요청에 ​​대해 더 많은 구성 요소를 하위 컨테이너 와이어로 사용합니다. 다른 모든 생성자는 비용이 많이 드는 것처럼 보지 않습니다. 대략적인 견적은 모든 무거운 작업이 필요한 시간의 최대 50 %를 담당한다는 것입니다. 결과적으로 Windsor 자신의 코드가 약 20ms 정도 걸리는 것처럼 보입니다. – Thuan

+0

@ Thuan : 너무 많으면 빠른 컨테이너로 전환하십시오. – Steven