2011-05-14 2 views
0

간단한 샘플입니다.관리 코드에서 네이티브 코드를 호출하십시오.

CodeDLL.cpp 파일 :

extern "C" { 
    __declspec(dllexport) int __cdecl SimulateGameDLL (int a, int b) { 
       return a*b; // Calculation in native code 
     } 
} 

GameSharp.cs 파일 :

static class GameSharp 
{ 
    public static class UnsafeNativeMethods 
    { 
     const string _dllLocation = "CoreDLL.dll"; 

     [DllImport(_dllLocation)] 
     public static extern int SimulateGameDLL(int a, int b); 
    } 
} 

또는

static class GameSharp 
{ 
    public static class GameSharpClass 
    {  
     public static int SimulateGameDLL(int a, int b) { 
      return a*b; //Calculation in managed code 
     } 
    } 
} 

첫 번째 : 나는 C로 작성된 DLL 파일을 가지고 ++ 네이티브 코드 및 관리되는 코드에서 함수를 호출하려고합니다. (래퍼)

두 번째로는 Managed Code로 변환했습니다. 내 코드가 this.What 하나 더 낫지 않습니다. 내 C++ 네이티브 코드를 Managed로 변환하거나 Managed Code로 변환하십시오. 어느 것이 더 빠릅니까? 왜?

명확하지 않은 경우 더 자세히 논의하겠습니다. 말씀하기 전에 투표를 닫지 마십시오. :) thanks

+0

질문에 대한 언급을 잊어 버린 것 같아요. – Constantinius

+2

콘솔 응용 프로그램을 만들고, 스톱워치에서 코드를 감싸고, 많은 반복을 통해 실행하고 모든 것을 두 번 반복하십시오. 너는 무엇을 얻 느냐? –

+0

자신의 게시물 하단에 ... "왜? 어느 쪽이 더 빠릅니까?" – gshauger

답변

2

.NET의 성능에 관해서는 관리되는 코드와 관리되지 않는 코드 사이에 눈에 띄는 차이가 없다고 생각합니다.

어쨌든 .NET에서 실행되는 모든 관리되지 않는 코드를 관리로 변환합니다.

나는이 수준에서 성능 병목 현상에 대해 걱정할 필요가 없다고 생각합니다. 게임 개발을하는 경우 네트워킹 및 그래픽 (쉐이더 사용)과 관련하여 성능에 대해 걱정해야합니다.

편집 :

http://msdn.microsoft.com/en-us/library/bb677124.aspx

". 실행의 최대 속도는 층 관리 프로그램에 약 10 %의 오버 헤드를 추가한다." (Windows Mobile의 경우)

3

코드가 단순하지 않기 때문에 어떤 코드 유형을 관리되지 않는 코드로 변환하는지에 따라 달라집니다. 코드가 복잡한 숫자 연산과 관련이 있다면 관리되지 않는 버전이 관리되는 버전보다 빠를 수도 있지만 컴파일러가 코드를 컴파일하거나 최적화하는 방법보다 알고리즘을 검토해야한다고 생각합니다.

관련 문제