2010-04-19 4 views
3

à partir de la version version de .NET plus fonction qui est égale à P/Invoke est ajouté àEn utilisant PInvoke vs .NET fourni fonctions

.NET

Maintenant il y a 2 questions dans mon esprit.

1) Lequel est préférable à l'autre en terme de vitesse, normalement j'utilise la fonction .Net mais en boucle serrée je ne sais pas vraiment laquelle va être la plus rapide.

2) Y at-il un site Web qui fournit la liste des contre-parties?

Répondre

4

1) S'il y a une fonction .NET, vous devez, bien sûr, l'utiliser - sauf si vous avez une très bonne raison de ne pas.

2) Oui, il y a une page qui associe les fonctions API Win32 aux méthodes .NET, mais il est assez vieux - il applique à .NET 1.1. Voir http://msdn.microsoft.com/en-us/library/aa302340.aspx

Edit: Il n'y a pas de liste nouvelle que je suis au courant, mais un truc que vous pouvez essayer est d'ouvrir les ensembles .NET Framework (comme mscorlib, système, etc.) dans le réflecteur et la recherche de la Nom de la méthode Win32. Si l'Assemblée invoque en interne vous il devrait être en mesure de trouver cette façon et de trouver où il est fait référence à tracer à une méthode publique que vous pouvez appeler, s'il y a lieu. Si ce n'est pas le cas, vous pouvez au moins copier la signature P/Invoke sans avoir à la comprendre.

+0

Y at-il plus récents là-bas? Je suis tombé dessus mais comme tu le dis c'est vieux. –

+1

pinvoke.net répertorie les équivalents gérés pour de nombreuses fonctions Win32 –

+0

En ce qui concerne la performance dans une boucle serrée, Si la vitesse est absolument critique, il existe de nombreux cas où l'utilisation de PInvoke dans .NET le rendra BEAUCOUP plus lent que les méthodes .NET ou écrire une application Win32. (Parfois, le plus rapide d'écrire une application Win32 juste pour cette boucle serrée, analyser ensuite les journaux dans votre application .Net) –