8
votes

Performance d'appeler non géré .dll de C #

Combien de temps dure la surcharge typique ajoutée en appelant un fichier .dll écrit en C ++ à partir d'une application C # à l'aide de la syntaxe suivante?

[DllImport("abc.dll", EntryPoint = "xcFoo", CallingConvention = CallingConvention.Cdecl)]
public extern static Result Foo(out IntPtr session,
                [MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallback callback, 
                UInt64 turnKey,
                string serverAddress, 
                string userId, 
                string password);


0 commentaires

5 Réponses :


1
votes

Parlez-vous des frais généraux d'invoquer la méthode natale? Si tel est le cas, je ne pense pas que cela soit important du tout, car il y a beaucoup d'appels de tels appels dans les bibliothèques .NET Framework Class.

Maintenant, si les frais généraux sont significatifs pour votre scénario ne peut être répondu que en effectuant des mesures de performance et en les comparant à ce que vous attendez.


0 commentaires

0
votes

Le marshalling dans la méthode native coûtera trois allocations de mémoire du tas NT, ce qui n'est pas si mauvais. C'est le dos de la déléguée qui devient inquiétant.


0 commentaires

7
votes

Consultez cet article sur la manière d'améliorer les performances interop. Que faire et quel meilleur à éviter.

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


0 commentaires

0
votes

Une bonne méthode pour vérifier que ce type de chose est lancé dans un point de pause où vous effectuez des appels. Je ne sais pas quand la bibliothèque est chargée, il suffit donc de vérifier le point de rupture du deuxième appel (sauf si le coût de chargement n'est votre principale préoccupation). Ensuite, ouvrez la fenêtre de démontage dans Visual Studio et voyez combien de lignes il y a avant que votre fonction DLL soit invoquée.


0 commentaires

0
votes

Je sais que cette question est vieille mais ive a réussi à appeler des fonctions natales rapidement avec non seulement à l'aide de Calli CIL Instruction, mais également avec un tour spécial, mais de l'OFC, vous devez gérer des arguments Pinnig et / ou des arguments marshalling vous-même si vous traitez avec des types complexes. y compris les chaînes ..


0 commentaires