문제

의존성 주입이 잠재적으로 큰 오버 헤드를 유발합니까?

특히 리졸버가 여러 번 (패턴 예제를보고있을 가능성이 높은 경우)라고 생각 하는가? 아니면 내가 잘못 생각하고 있습니까? 불행히도 나는 그것을 사용한 적이 없지만 그것을 사용할 계획 이었기 때문에 나 자신을 테스트 할 수 없습니다.

도움이 되었습니까?

해결책

사용하지 않는 한 서비스 로케이터, 나는 오버 헤드가 상당한 차이를 만들 것이라고 의심합니다. (당신이 있더라도, 그것은 중요하지 않을 것입니다.)

생성자 주입 및 최신 프레임 워크를 사용하여 객체가 구성 될 때 리졸버가 호출됩니다. 대부분의 경우 종속성이있는 객체가 상대적으로 높은 수준의 구성 요소, 오래 지속되거나 둘 다인 것으로 생각할 것입니다.

IOC 컨테이너를 사용하고있는 경우 a 많은 단단한 루프에 의존성이있는 물체의 ~할 것 같다 약간의 최적화가 필요합니다. 항상 프로파일 링하거나 벤치마킹 할 수 있습니다.

요컨대, 나는 그것에 대해 걱정하지 않을 것입니다.

다른 팁

개념으로서의 종속성 주입은 오버 헤드가 높을 필요가 없습니다. 단순히 클래스를 구성하여 다른 클래스와의 연결이 코드에서 열심히 연결되지 않고 런타임에 구성 될 수 있습니다.

물론, 오버 헤드가 높은 런타임 연결을 구축하는 방법이 있습니다. 그런 방법을 피하십시오.

http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html 성능 테스트의 경우. 각 테스트는 100000 개의 창작물을 실행했습니다.

벤치 마크는 싱글 톤 해상도 및 과도 해상도를 보여줍니다. 싱글 톤은 클래스의 인스턴스를 등록합니다 (Unity 사용).

container.RegisterInstance<IMyType>(new ConcreteMyType());

그리고이 인스턴스는 매번 반환됩니다 (매우 빠릅니다).

과도는 클래스 유형 만 등록하는 곳이며 IOC 프레임 워크는 Creatnig It의 작업을 수행합니다.

container.RegisterType<IMyType, ConcreteMyType>();

싱글 톤을 반환하는 데 더 많은 시간이 걸립니다.

전반적인 최적화 측면에서 의존성 주입의 오버 헤드는 작은 맥주입니다. 다른 성능 병목 현상은 최적화해야 할 가능성이 높습니다.

의존성 주입 그 자체 단순한 간접이므로 오버 헤드가 있지만 실제로는 아주 작은 것입니다. 런타임 패턴 일치 및 분해는 또 다른 것입니다 (그러나 종종 의존성 주입과 함께 사용되지만 DI와 같은 것은 아닙니다. 요구 그런 엑스트라 ;-).

의존성 주입은 큰 오버 헤드를 제공하지 않을 것입니다. 나는 당신이 다른 곳에서 병목 현상을 찾을 것이라고 확신합니다. 오버 헤드에 대해 너무 걱정이된다면 C#은 사용하려는 언어가 아닐 수 있습니다. 당신은 그것이 가져 오는 혜택을 위해 c#을 사용하고, 당신이 다루고 싶지 않은 세부 사항을 추상화합니다.

DI와 마찬가지로 응용 프로그램을 느슨하게 결합시키는 것과 같은 이점이 있으므로 향후에도 더 쉽게 유지할 수 있습니다.

오버 헤드 대 간과 및 유지 관리 가능한 코드 ... 나는 간증 가능하고 유지 관리 가능한 코드를 선택합니다 (항상 더 빠른 컴퓨터를 구입할 수 있습니다).

=)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top