C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[24019] 닷넷과 네이티브의 성능 비교 대해서..
크레브 [kkol] 18901 읽음    2013-07-02 14:50
바로 아래쪽에 감정적인 글 있어서 그 내용을 다시 올리기가 좀 그렇긴 하지만..
차분한 토론은 모두에게 좋은 정보가 되지 않을까합니다.


아래 글들(댓글포함)을 보면서 이상하다고 생각한 점은..

project님이 "C++ 네이티브 컴파일러와 C# 매니지드 컴파일러를 이용해서 DirectX 벤치마크한 결과를 보면 성능은 엇비슷하게 나옵니다" 라고 하셨는데..

닷넷(C#)의 성능이 네이티브(C++)와 비슷하다고 하는 예시가 Direct X를 든것은 좀 이해가 안되네요.
C#에서 DirectX를 호출해도 그 성능은 Direct X의 바이너리 성능이지 C#의 성능이 아니지 않나요?

또다른 대표적인 예가  머신 비전 라이브러리를 사용하는 것입니다.
코그넥스 , Matrox등의 상용 머신 비전 라이브러리를 C#에서 호출한다고해도
연산 시간면에서 절대 C++에서 호출한것 보다 성능이 떨어지지  않겠죠.
이것도 역시 C#이나 C++의 성능이 아니라 머신 비전 라이브러리의 자체의 성능입니다.
아마도 비전 알고리즘은 소스가 C++이나 어셈블러를 이용해 최적화가 되어 있겠죠.

그렇다면 "과연 C#의 성능이 C++등과 비슷하느냐?" 하는 문제는
당연하게도 각각의 개발 분야에 따라 그럴수도 있고 아닐수도 있습니다.
자신의 한정된 경험에 따라 일반적으로 얘기할수 있는 주제는 아닌것 같습니다.

GUI 화면이 많거나, 다른 라이브러리 호출이 많은 프로젝트에서는 성능이 별 차이가 없겠죠.
하지만 이미지 프로세싱등 직접적인 연산이 많이 들어가거나
10 msec정도의 짧은 시간제어가 필요한 분야에서는 GC 때문에라도
C++에 비해 C#의 성능은 많이 떨어 질 것 같습니다.






오랑캐꽃 [oranke]   2013-07-02 16:42 X
비슷한 논리의 의견을 루아를 도입할 때도 많이 들었습니다.
게임용 GUI를 루아로 제어하도록 해 두었는데, 아무래도 느리지 않을까 하는 걱정들이었지요.
게임 내 객체들의 관계만 정의할 뿐 실제 랜더링에는 아무런 관여를 하지 않는다고 설명해도
스크립트에 대한 편견은 깨기가 쉽지 않더군요.

비슷한 이유로... 전 델파이만큼 C#이 좋아요~~~ ^^;;
크레브 [kkol]   2013-07-02 17:30 X
시간날때 C#을 한번  해보고 싶군요. 
깔쌈보이 [handsome]   2013-07-02 17:54 X
말씀하신것처럼, 닷넷은 순간반응속도는 참 거지같습니다.
하지만 약 5년전에 프레스기에서 생산된 제품의 불량여부를 판별하기위해 제품을 일일이 촬영해서 알고리즘으로 가려내는 프로젝트를 델파이와 c#으로 동시에 만들어 테스트해본적이 있었습니다.

알고리즘은 인터넷에 떠돌아다니는 자바소스를 우연히 구해서 델파이와 c#으로 포팅해서 구현했네요.

여기서 놀라운 사실을 발견했었었죠.

성능이 당연히 델파이가 좀 빨랐었는데, 그건 네트워크나 파일에서 이미지를 불러와 차리하고 다시 네트워크로 결과값을 보낸뒤, DB에 저장하고 프로그램에 보여주는 전체과정이 빨랐던거구요...
똑같은 알고리즘이 적용된 이미지처리 부분은 의외로 닷넷이 표가 날 정도로 빨랐던 기억이 납니다.

뭐가 이럴때 더 좋은거지, 뭐가 무조건 다 좋은건 아닌 좋은 예가 아닐까요?
김태선 [cppbuilder]   2013-07-02 18:06 X
닷넷이 놀라운 속도를 보이는 파트의 대부분은
네이티브 코드로 작성된 라이브러리를 사용합니다.
그 라이브러리는 최신의 기술로 만들어진 최고 수준의 라이브러리입니다.
닷넷의 속도 문제를 의식한 MS에서 정책적으로 이런식으로 해온 것으로 알고 있습니다.

이미지 처리 같은 경우 닷넷으로 해도 속도가 떨어지지 않는 일이 있는데
그게 다 네이티브로 만들어진 라이브러리 영향입니다.
실제 픽셀 하나 하나 제어해서 이미지를 변형하는 경우 등 실제 코드가 많이 들어가는 경우
확연히 C++이나 델파이의 네이티브 성능이 좋습니다.

저도 예전에 닷넷으로 이미지처리를 해보고 기대 보다 훨씬 빨리 놀랐던 적이 있습니다.
그건 닷넷 자체가 빠른게 아니고 라이브러리 때문이었습니다.
사실 속도 문제의 대부분을 차지하는 부분은 가장 연산이 많은 특정한 루틴 부분이기 때문에
그곳이 네이티브코드로 최적화 되어 있으면, 그냥 호출자 역할을 하는 닷넷이나
스크립트나 매우 좋은 성능을 보여준다고 생각되게 만듭니다.

닷넷 그 자체도 사실 그리 느리지 않으나,
최적화된 네이티브 코드 보다 빠른 건 그 어디에도 없습니다.

이성호 [shlee0613]   2013-07-02 18:14 X
Turbo C, Assembler 부터 시작해서 20년 넘게 CBuilder와 Delphi를 주력 개발툴로 사용하다 얼마전에 C#으로 갈아탔습니다.
전 장비제어 개발 위주여서 몇년전부터 비젼이나 여러 제어 카드들이 볼랜드툴을 지원하지 않는 경우가 많아서 어쩔 수 없이 바꾸었는데,
사용자의 성향이나 환경에 따라 다르겠지만 저에게는 C# 이거 정말 걸출한 개발툴입니다.
메모리 관리에 신경 쓸필요가 없으니 안정성이 증가 되었고, MultiThread는 네이티브 보다도 뛰어난것 같습니다.
예를 들어 C++에서 Sleep(1)로 Context Switching을 하면 제어권을 1초당 1000번을 받는게 아니라 약18회정도만 받습니다.
하지만 C#은 정확히 1000번을 받습니다. 물론 C++도 SwitchToThread()를 쓰면 수십만번도 받지만 대신 CPU점유율이 올라가죠.
수많은 Thread에서 정확한 시간제어가 필요한 장비제어 분야에서는 제 생각에는 Delphi 보다도 뛰어난 툴인듯 합니다.
크레브 [kkol]   2013-07-02 18:25 X
이성호님의 쓰레드에 대한 경험은 솔직히 의외군요. 그 정도라면  장비 제어 분야에서도 탁월한 툴이 될듯합니다.
저는 C#을 사용하여 개발하는 것을 어깨 너머로 잠깐 본 정도인데..
거의 실시간(Delay없이) 반응하는 소스 편집기의 기능이 가장 부러웠습니다.
Lyn [tohnokanna]   2013-07-02 23:46 X
C# 정말 훌륭한거 맞습니다. 저도 웬만하면 다 C#으로 짭니다.

하지만 최대한의 퍼포먼스를 뽑기엔 불리하고, GC에 의한 랙이 치명적인 분야 역시 있습니다. 차라리 그냥 계속 느린게 낫지 빠르다가 느리다가 하는게 더 문제거든요. 닷넷을 쓰면서 그걸 피하려고 하다 보면 메모리 편리하게 관리하라고 만들어놓은 GC를 수동으로 제어하는 결과가 나오고 맙니다.

막상 연산하는부분은 그대로 Native끌어다 쓰는 경우가 많고... 애초에 연산이 중요한 라이브러리를 닷넷으로 만들어서 내놓는 회사자체가 없으니까.
Lyn [tohnokanna]   2013-07-02 23:57 X
그리고 닷넷에서 Thread동작이 Native와 다른것은 닷넷에서 생성하는 쓰래드가 OS의 쓰래드에 1:1 매칭이 되지 않기 때문입니다.
OS의 쓰래드는 기본적으로 커널에서 설치하는 타이머 인터럽트의 해상도가 1ms 보다 훨씬 크기 때문에 오버헤드가 없이 1ms 의 컨텍스트 스위칭 타이밍을 지킬수가 없습니다. 중간에 작업을 더 해야지.

궂이 하고 싶으면 timeBeginPeriod(1) 를 호출하여 타이머 해상도를 올려 두면 Native 에서도 Sleep(1)을 호출할때 거의 정확하게 1000번의 스위칭을 받을 수 있습니다. 사실 게임이나 동영상 관련 프로그램들은 대부분 이거 호출 해 둡니다... 최대한 타이밍을 지키기위해

깔쌈보이 [handsome]   2013-07-03 08:16 X
여기서 제가 정말 화나는 부분이 나옵니다.
델파이나 빌더 하면 vc와 비교해서 성능적으로는 어깨를 맞대면서 생산성은 극대화되는 거였는데...

vs가 극악의 성능은 vc로... vc와 연동해서 극악의 성능을 유지하며 생산성은 닷넷기반으로 하는 구조적인 부분이 이미 완성단계에 들어선것 같습니다.

버그투성이 개발툴을 돈받고 파는 업체로 인신매매(?) 되면서 비전도 없고 내세울 성능도 희박해지고, 생산성도 이젠 자랑거리도  안되는... ㅠ
지금의 델파이, 빌더를 만든 국내외 관련자들을 증오할 따름입니다!

늦었더라도 이들이 X잡고 반성이라도 할까 모르겠네요
Lyn [tohnokanna]   2013-07-03 10:01 X
아... 델파이랑 빌더는 정말 답이 안보여요 ...
크레브 [kkol]   2013-07-03 11:37 X
그런데.. C#이 있는데.... VC++닷넷의 존재 이유는 뭘까요? Managed C++이라고 하는거 맞죠?
깔쌈보이 [handsome]   2013-07-03 13:03 X
크레브님, 닷넷용 VC++은 없습니다. VC++은 Windows OS 전용입니다.

VS에서 제공하는 .NET용 언어는 C#,F#과 VB.NET입니다. (솔직히 F#은 한번도 안 써봐서... 잘... --);

VC의 존재이유는 너무나도 많습니다.
델파이/빌더가 만드는건 시간이 어떻게 걸리건 VC도 만들수 있지만, VC가 만드는건 델파이/빌더로는 죽다깨도 못 만드는게 많습니다.
네이티브한 Windows기반 프로그램을 만드는 것 중 VC만이 Windows 보호모드를 넘나드는 것으로 알고 있습니다.
크레브 [kkol]   2013-07-03 13:45 X
엇..다시 찾아보니 .. VC++닷넷이아니라... C++/CLI 라는게 있나본데요..
깔쌈보이님..이건뭐죠?  이것도 날짜 보니까 2009년인데.. 지금은 없어졌나보죠?
http://andromedarabbit.net/wp/cplusplus_cli_lecture_2009_01/
깔쌈보이 [handsome]   2013-07-03 14:13 X
글쎄요... 저도 VC++은 전문적으로 사용하는 사람이 아닌지라 --;
Lyn [tohnokanna]   2013-07-03 14:46 X
크레브님//

C++/CLI는 예전 C++.net 이라고 불리던 언어의 후속작입니다... C++.net은 이제는 사라졌구요.
C++/CLI 로빌드된 최종 결과물은 닷넷바이너리입니다.

Native C++의 문법을 (거의)모두 지원하고 문법을 확장해서 닷넷도 지원 합니다.. 한 코드에 두가지가 섞일 수 있다는 점을 이용해서 보통 C/C++로 된 라이브리를 닷넷용으로 랩핑할때 씁니다.

문법이 C++ 문법을 확장한것이기 때문에 그 난잡함과 난해함이 극에 달하여 (...) 저런 특이한경우가 아니면 잘 안씁니다. 그냥 C# 쓰고 말죠 =_=a
Lyn [tohnokanna]   2013-07-03 14:48 X
깔쌈보이 // 보통 보호모드를 넘나드는건 드라이버들인데... 걔들은 VC++ 컴파일러가 아니라 WDK(구DDK)에 별도의 컴파일러가 있습니다 ..
크레브 [kkol]   2013-07-03 15:01 X
Lyn / 그렇군요. 제한적으로 사용한다면 C++/CLI 가 유용한 경우도 있긴 하군요. 이제 좀  개념이 잡힙니다. ^^
깔쌈보이 [handsome]   2013-07-03 16:51 X
아, VC++로 코딩하고 컴파일하던데, 컴파일러는 다른가보군요...
아니면 제가 잘못봤던가...
Lyn [tohnokanna]   2013-07-03 17:56 X
깔쌈보이 // 최신 Kit는 VS에 애드온 되는 형태도 있긴 합니다... 아마 VS2010부터 되던가같은데. 어쨋든 컴파일러는 따로 있습니다.
VS에 기본적으로 들어있지도 않구요.

그 이전에도 그냥 에디터로 VS를 쓰는 경우는 많았습니다... 어쨋든 헤더 Path만 제대로 잡아주면 자동완성은 되거든요

+ -

관련 글 리스트
24019 닷넷과 네이티브의 성능 비교 대해서.. 크레브 18901 2013/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.