2011-01-13 7 views
4

unden CLR 4.0을 실행하면 CLR 2.0 용으로 컴파일 된 .NET 프로그램이 더 빨리 실행됩니까?CLR 2.0 대 4.0 성능?

의 app.config :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0,Profile=Client" /> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 
+0

가능하면 4.0 런타임이 2.0 런타임보다 나은 지점 중 하나에 도달하면 가능합니다. 그러나 많은 관광 명소가 있는지 나는 모른다. – CodesInChaos

+0

나는 어떤 상황에서는 더 빠르다고 의심하지 않습니다. 응용 프로그램의 병목 현상이 아닐 수도 있습니다. –

+7

한 가지 방법 만 찾을 수 있습니다. 그것을 시도하고 볼! –

답변

7

일반적으로 더 -는 동일하지 않습니다.

기본적으로 CLR 4 런타임은 CLR 2 코드 기반을 실행하기 위해 CLR 2 런타임을로드합니다. CLR 4에서 강제 실행은 app.Config에 useLegacyV2RuntimeActivationPolicy을 설정해야합니다.

플래그를 추가하면 CLR 버전 4에서 실행됩니다. 일반적으로 성능은 매우 유사 할 수 있지만 JIT 및 코어 런타임의 변경으로 인해 새로운 런타임과 약간 다를 수 있습니다. CLR 4가 더 빨라질 것이라는 보장은 없습니다. 일반적으로 두 런타임 모두에서 성능이 매우 비슷할 것으로 예상되지만 시간이 지날수록 느려질 수 있습니다.

성능 문제가있는 경우 응용 프로그램의 프로필을 만드십시오. 런타임을 변경해도 성능 문제는 해결되지 않습니다. 그러나 둘 다에서 실행되는 동안 응용 프로그램을 프로파일 링하는 것이 당신에게 중요한 점을 알 수있는 유일한 방법 일 것입니다.

+0

답을 묻는 질문이있어서 혼란 스럽습니까? _ "CLR 2 런타임은 CLR 2 코드 기반을 실행하기 위해 CLR 2 런타임을로드합니다."_은응용 프로그램이 CLR 2.0에서 빌드되고 app.config에'< supportedRuntime version = "v4.0"/>', CLR 4.0을 사용하는 app.config에도 불구하고 응용 프로그램이 CLR 2.0에서 실행됩니까? –

+0

@Reed - [내 게시물] (http://stackoverflow.com/questions/6921976/#6963368) 및 MSDN 설명서에서 'useLegacyV2RuntimeActivationPolicy'는 혼합 모드 어셈블리에만 적용됩니다. 평범한 사람들에게 중요한 유일한 설정.오래된 패키지에 새로운 CLR을 사용하도록 순전히 관리되는 코드가있는 Net 앱은'supportedRuntimes' 태그입니다. – nekno

0

일반적으로 말하면, 눈에 띄지 않습니다. 런타임은 모두 이전 버전과 호환되며 이전 버전의 AFAIK 라이브러리는 언어 사양이 변경되거나 (예 : 공분산/반동 지원 추가) 실제 메모리/CPU 호그로 식별 된 경우에만 수정되었습니다.

0

보통 : 아니요입니다. 응용 프로그램이 작업의 작은 조각 ThreadPool이 홍수 경우

이가 성능이 향상되었다 코너 케이스의 몇 가지가있다, 즉 다음 작업 훔치는 ThreadPool이 최적화는 큰 승리가 될 것입니다. 또한 작업이 수행되는 순서가 크게 변경 될 수 있으므로 실수로 주문에 의존하는 일부 앱이 다운 될 수 있습니다.

GC (중대형 개체 압축) 및 Interop (개체 잠금 변경) 백그라운드에서 비슷한 종류의 코너 사례가 있습니다.

요약

닷넷 3.5 (CLR 2.x에서) 응용 프로그램의 성능이 후 예상 .NET 4.5 (CLR 4.x의)에 대한 응용 프로그램을 시도보다 더 나쁜 경우

.