2011-07-18 3 views
5

C# 4에서는 beforefieldinit 플래그가없는 유형의 동작이 변경되었으므로 이제 유형 초기화 프로그램이 클래스의 정적 필드를 처음 사용하기 전에 호출 할 수 있습니다..NET 4에서 BeforeFieldInit 동작이 변경된 이유는 무엇입니까?

내 질문에 C#/.NET 팀에서 해당 동작을 변경 한 이유가 무엇입니까? 가장 큰 이유는 무엇입니까? 이 변화가 의미가있는 실제적인 예를 보여줄 수 있습니까?

+0

참조? 이거 어디서 읽었 니? – leppie

+1

나는 그것을 여기에서 읽는다 : [link] (http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx) 그리고 나의 의견 주된 이유는 확장 메소드의 성능입니다. 어떻게 생각해? –

+1

부적절한. 이러한 것들은 이유가있어서 문서화되지 않았습니다. –

답변

11

동작은 항상 문서화을 무엇의 경계 내에있다 - 그것은 내가 의심 JIT를 팀이 할 수있는 방법을 찾기 위해 관리 4.

는 .NET에서 게으른 열망되는 것을 변경하는 것이 단지 성능 저하없이 게으르거나 ... 어쩌면 성능이 어딘가에 도움이 될 수 있습니다. 이것은 .NET 4 CLR 대 .NET 2 CLR의 동작이 이와 같이 변경 될 가능성이 있습니다 ... 내가 알아 차 렸지만 다른 많은 사람들이 그랬던 것 같습니다. JIT 팀이 문서화 된 보증 내에서 적절하다고 생각하는대로 조정하는 것은 전적으로 합리적이라고 생각합니다.

궁극적으로 이것이 코드를 실패하게 만들면 이미 버그가 있습니다.

+0

답변 해 주셔서 감사합니다. JIT 컴파일러 호출 유형 initialazers를 아십니까? 그것의 유형 initialazer의 호출과 함께 메서드를 컴파일 두 번 또는하지? 첫 번째 호출 전에 메서드가 실행되는 동안 성능이 부족하지만 메서드의 두 번째 호출에는 정상적인 성능이 있습니다. –

+0

@ 스 멜리 : 솔직히 말해서 모르겠다. 나는 일종의 썽킹이 계속 될 것으로 기대하지만, 항상 JIT 팀에게 세부 사항을 남겼습니다. :) –

관련 문제