1

타사 라이브러리와 성능을 위해이 라이브러리를 테스트하기 위해 직접 작성한 간단한 벤치 마크 테스트가 있습니다. 타사 라이브러리는 C++/CLI .NET 라이브러리이며 대부분의 코드는 관리되지 않습니다. 이 라이브러리는 .NET Framework 2.0 용으로 어셈블됩니다. 내 벤치 마크 테스트는 라이브러리에 약간의 오버 헤드가 추가되고 메서드에 대한 간단한 호출, 이벤트 처리기 구독, 연결 닫기/열기 등 관리되는 C# 코드입니다. 라이브러리는 여러 작업 스레드에서 일부 작업을 수행하며 소켓도 처리합니다.VS2005와 비교하여 VS 2008에서 컴파일 된 프로젝트의 이상한 성능 향상

이상한 일 - VS 2005로 벤치 마크 테스트를 컴파일 할 때와 VS 2008에서 동일한 작업을 수행 할 때 다른 성능 값을 얻었습니다 (VS 2008은 10 % 향상).

모든 코드에서 .NET 2.0 기능 만 사용하는 경우 언어/기능 또는 3.5 라이브러리가 사용되지 않으면 성능이 향상 될 수 있습니다. 내 벤치 마크 프로젝트는 System.dll 및 타사 DLL만을 참조하며 벤치 마크 코드는 VS2005 및 VS2008 프로젝트에서 절대적으로 동일합니다.

+0

VS2005와 VS2008 컴파일러/JIT 간의 성능 차이가 논의되는 기사, 블로그 등의 링크에 대해 크게 감사하겠습니다. VS2008에 VS2005 프로젝트를 재 컴파일하여 성능을 향상시킬 것을 고객에게 권장 할 수 있습니까? –

답변

2

2.0 기능 (language? Library?) 만 사용하더라도 3.5 JIT는 코드를 간단하게 최적화하거나 일부 라이브러리를 더욱 최적화 할 수 있습니다.

다른 말로하면 : 인터페이스의 2.0 기능은 동일한 하위 호환성을 유지하지만 구현에는 해당하지 않습니다. 나는 GC를 가정한다 (그리고 그 잠금 또한 끊임없이 조정된다).

정확하게 차이를 만드는 원인을 알아내는 것은 매우 어려울 것이다. 가장 근본적인 함수 (memmove와 같이 mem의 byte/word 검색)가 더 최근의 CPU에 맞게 최적화 된 것처럼 간단 할 수 있습니다.

+0

.NET 3.5 및 .NET 2.0의 핵심 라이브러리는 System.DLL 2.0.0.0과 동일하므로 런타임 차이가 없어야합니다. 아마도 컴파일러는 더 많은 함수를 인라인하거나 더 많은 함수를 추가함으로써 더 많은 최적화를 추가 할 수 있습니다 ... –

+1

(다른 툴체인과의 경험에서 추측 한 실제 또는 절반의 .NET 전문가가 아닙니다) 그리고 그 system.dll에는 같은 버전의 모든 동일한 의존성? 그리고 JIT에서 VM은 또한 작업을 수행 할 수 있습니다. VM은 아무 것도없는 JIT _compiler_라고하지 않습니다. –