2011-05-14 4 views
0

Il s'agit d'un échantillon simple.Appelez le code natif à partir de la performance du code géré

CodeDLL.cpp fichier:

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

GameSharp.cs fichier:

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

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

ou

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

Le premier: J'ai un fichier dll qui écrit en C++ natif code et j'essaie d'appeler la fonction dans le code managé. (wrapper)

Dans le second, je l'ai converti en code géré. Mon code n'est pas aussi simple que cela. Quel est le meilleur Convertir mon code natif C++ en Managed ou appeler le code managé du formulaire. Lequel est le plus rapide? Pourquoi?

Si ce n'est pas clair, s'il vous plaît dites-moi que je vais en discuter plus.Ne votez pas pour fermer avant de me dire. :) thanks

+0

Je pense que vous avez oublié de mentionner la question – Constantinius

+2

Créez une application console, enveloppez le code dans un chronomètre, exécutez-le sur plusieurs itérations et répétez le tout deux fois. Qu'est ce que tu obtiens? –

+0

C'est au bas de son message ... "Pourquoi? Lequel est le plus rapide?" – gshauger

Répondre

2

Je crois que quand il s'agit de performances dans .NET il n'y a pas de différence notable entre le code managé et non managé.

Je convertirais votre code non géré à géré si tout s'exécute sur .NET de toute façon.

Je pense juste que vous ne devriez pas vous inquiéter d'un goulot d'étranglement de performance à ce niveau. Si vous faites du développement de jeux, vous devriez vous inquiéter des performances en matière de réseau et de graphisme (utiliser des shaders).

EDIT:

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

"Vitesse maximale d'exécution La couche gérée ajoute environ 10% de frais généraux au programme." (pour Windows Mobile)

3

Puisque votre code n'est pas aussi simple que cela, je dirais que cela dépend du type de code que vous convertissez en code non géré. Si le code a à faire avec des opérations numériques complexes, peut-être que la version non managée sera plus rapide que la version gérée, MAIS je pense que vous devriez revoir votre ALGORITHME plus que la façon dont le code est compilé ou optimisé par le compilateur.

Questions connexes