잊지 않겠습니다.

CLR via C# 책에서 일반적인 통념을 부정하는 견해가 있어서 여기에서 간단히 소개. 

1. 컴파일 시에 JIT 컴파일러는 실행환경의 CPU type을 알 수 있기 때문에, 최적화된 지시어를 이용해서 Native code를 생성함으로써 성능의 향상이 가능

2. JIT 컴파일러는 특정 상황의 테스트값 혹은 논리 연산의 결과를 실행 전에 알아내서 좀 더 빠른 Native code의 생성이 가능하다. 

3. CLR은 appliaction의 실행 패턴을 Profile함으로써, 실행중인 IL code를 native code로 다시 컴파일 할 수 있다.

이상의 이유로.. managed code가 unmanaged code보다 성능이 우수하다.


  약간은 생뚱맞기도 하고, 절대로 공감할 수 없다는 사람들이 엄청나게 덤벼들 것이 뻔한 상황이지만.. 개인적으로 전에 C++로 작업하던 환경과 지금 C#으로 작업하는 환경에서 겪어본 상황을 생각하면 은근히 이 말이 맞다는 생각이 든다. 일단... 첫 실행 시간. JIT에 의해서 native code가 생성되는 그때는 절대적으로 unmanaged code가 성능이 더 우수하다. 그렇지만, JIT에 의해서 native code가 생성된 이후라면.. 이미 사용된 assembly의 내용을 재이용하는 상황에서는.. 속도가 비슷하거나, 내가 짠 C++코드보다 빨랐었던 경험이 분명히 있었다. -_-;; 
(내 코드가 문제였을거야.. 라는 생각도 하지만.;)

  .NET으로 만든 코드에 대한 자신감을 좀 더 갖고 이야기를 해도 괜찮을 것 같다. 잘 생각해보면.. 그렇게 성능이 중요하면 assembly로 짜라. 라는 말이 가장 막강하긴 하지만. ^^
Posted by Y2K
,