2013-07-14 1 views
0

나는 최근에 부트 스트랩 코드에 다음을 사용하여, 내 MVC 응용 프로그램에 유니티 차단을 추가했습니다 : 이상한 내가 가지고 내 편집기 템플릿을보고 있어요,유니티 차단 (AOP) 둔화 MVC 편집기 템플릿

private static void RegisterProfilingHooks(IUnityContainer container) 
    { 
     var registrations = 
      container.Registrations.Where(m => m.RegisteredType != m.MappedToType).Where(
       m => m.RegisteredType.Name != "IProfilingService").Take(150).ToList(); 

     foreach (var registration in registrations) 
     { 
      container.AddNewExtension<Interception>().Configure<Interception>().SetInterceptorFor(
       registration.RegisteredType, new InterfaceInterceptor()); 
     } 

     container.Configure<Interception>() 
      .AddPolicy("ProfilerPolicy") 
      .AddMatchingRule<NamespaceMatchingRule>(
       new InjectionConstructor(new InjectionParameter("MyApp.*"))) 
      .AddCallHandler<ProfilerHandler>(new ContainerControlledLifetimeManager()); 
    } 

을하지만 편집기 템플릿 당 약 2 초 (밀리 초 전,). 따라서 10 개의 요소가있는 폼은로드하는 데 10 초가 걸립니다.

기본적으로이 코드는 모든 IoC 등록에서 프로파일 링 처리기를 인터셉트하여 이러한 인스턴스에서 호출 된 모든 메소드를 프로파일 링 할 수 있습니다.

ProfilerPolicy 구성을 주석 처리 할 때도 문제가 발생하기 때문에 문제는 프로필러 처리기가 아닙니다.

그것은 foreach 루프이 원인을 확장 배선는 다음과 같습니다

foreach (var registration in registrations) 
{ 
    container.AddNewExtension<Interception>().Configure<Interception>().SetInterceptorFor(
     registration.RegisteredType, new InterfaceInterceptor()); 
} 

왜이 차단 코드 내 편집기 템플릿에이 기괴한 영향을 미칠까요?

추가 정보 : 나는 기본 패스 스루, 그리고 여전히 문제를 참조하도록 업데이트대로

나는 자신이 원인이 템플릿에 무엇이든을 배제했습니다. 예를 들어, 문자열 템플릿으로 사용 :

@model System.String 
@Html.TextBoxFor(m => m) 

나는 여전히 같은 타이밍을 얻는다.

어떻게 든이 요격으로 인해 우리의 견해가 끌리는 것을 찾지 못하거나 무엇이 있는지 알 수 없습니다. 이것이 제가 생각할 수있는 유일한 것입니다. 우리의보기 경로 정의는 꽤 솔직하다 : 당신은 루프에서 차단 확장 여러 번 추가하는 것처럼

AreaPartialViewLocationFormats = new[] { 
    "~/Areas/{2}/Views/Sublayouts/{1}/{0}.cshtml", 
    "~/Areas/{2}/Views/Renderings/{1}/{0}.cshtml", 
    "~/Areas/Global/Views/Shared/{0}.cshtml" 
}; 
+0

보인다. 필자는 컴파일러를 가지고 있지 않기 때문에 지금은 확인할 수 없지만 반드시 필요한 것은 아닙니다. 문제는 - 귀하의 경기 침체의 원인이 될 수 있습니까? –

+0

아마도. 나는 가로 채기에 익숙하지 않으며,이 해결책이 최적이 아닐 가능성이 높습니다. 편집자 템플리트를 끌어 당기는 것만 보이는 이상한 것입니다. 다른보기 및 부분보기는 영향을받지 않습니다. 당신의 생각에 너무 감사드립니다. –

+0

하지만 기본적으로 모든 등록에 대한 차단을 등록해야하지만 * 이미 *로드 된 상태입니다. (모든 등록에 대해 차단을 명시 적으로 추가하지 않으려합니다.) 반복하지 않고 추가하지 않고 모든 컨테이너 등록에 가로 채기를 적용하는 방법을 모릅니다. –

답변

1

것 같다. 필자는 컴파일러를 가지고 있지 않기 때문에 지금은 확인할 수 없지만 반드시 필요한 것은 아닙니다. 문제는 - 귀하의 경기 침체의 원인이 될 수 있습니까? 당신은 루프에서 차단 확장 여러 번 추가처럼 (짧은 토론 후 OP에 의해 제안에 대한 답변으로 게시)