'닷넷속도'에 해당되는 글 1건

  1. 2007.05.29 닷넷(.NET)의 속도 4
posted by 권오성의 Biomedical Engineering 2007. 5. 29. 15:43

닷넷은 컴파일을 해도 기계어 바이너리 실행파일을 만들지 않는다. 대신 중간언어로 표현되는 가상 어셈블리어를 만들고 이를 런타임에 실행하는 방법을 사용한다. 형태적으로 보면 인터프리팅과 컴파일링의 중간쯤에 해당한다. 그러다 보니 당연히 기계어로 직접 컴파일하는 기존의 방법에 비해서 속도가 떨어지게 된다. 그렇다면 도데체 얼마나 떨어지게 되는 것일까?

모든 프로그램에 대하여 일반적으로 얼마나 속도저하가 있다고 말하기는 다소 어려운 부분이있다. 그래서 속도게 가장 민감한 3D게임의 예가가 있다. Vertigo Software는 닷넷의 속도 비교와 기존 C코드를 닷넷으로 포팅하는 예를 QuakeII를 통해서 보여주었다.

이 프로젝트에서는 현재 GPL로 되어 있는 QuakeII 소스를 네이티브 C++로 포팅하고 다시 이것을 매니지드 C++(C++.NET)으로 포팅하였다. 기존 QuakeII소스는 C 코드인데 이것을 C++로 포팅하는데 4일, 다시 이것을 C++.NET으로 포팅하는 데 하루, 그위에 C++.NET으로 새로운 기능(레이더)를 추가하는데 이틀이 걸렸다고 한다.

결론적으로 QuakeII를 닷넷으로 포팅한 결과 네이티브에 비하여 15%속도 손실이 있었다고 한다. 이 수준은 매우 미미해서 테스터들은 속도저하를 전혀 실감하지 못했다고 한다. 많은 연산을 수행하는 3D엔진이 이정도이면 대부분의 일반적인 비지니스 로직은 거의 아무런 속도 손실이 없다고 봐도 과언이 아니다. 그러므로 닷넷으로 만든 어플리케이션에 대해서 속도가 저하될 것을 우려할 필요는 전혀 없다는 것이다.

오히려 기존 코드를 닷넷으로 포팅할경우 닷넷 라이브러리와 기존 라이브러리를 동시에 사용할수 있기 때문에 프로그래밍 작업이 한결 자유로워진다. 닷넷으로 포팅되면 아래와 같은 이점이 생긴다.

1. 메모리 관리를 가비지컬렉션(Garbage Collection)을 사용하거나 프로그램으로 직접 컨트롤 할 수 있다.
2. 닷넷 프레임웍을 메쏘드 사용하거나 기존 윈도우 API를 사용하거나 마음대로 선택할 수 있다.
3. 닷넷 프레임웍 클래스와 STL같은 기존 라이브러리를 동시에 사용이 가능해진다.

QuakeII 포팅에 대한 자세한 내용은 아래 링크를 참고 하기 바란다.(영문)
http://www.codeproject.com/managedcpp/Quake2.asp#xx677031xx

[펌] http://www.code99.net/tabid/791/mid/1496/newsid1496/3/Default.aspx