Devriez-vous utiliser des pointeurs dans votre code C #? Quels sont les bénéfices? Est-il recommandé par The Man (Microsoft)?
Réponses
Trop de publicités?De "L'Homme" lui-même:
L'utilisation des pointeurs est rarement nécessaire en C#, mais il y a certaines situations qui en ont besoin. À titre d'exemples, à l'aide d'un dangereux contexte pour permettre à des pointeurs est justifiée par les cas suivants:
- Traiter avec les structures existantes sur le disque
- Advanced COM ou appel de Plate-forme de scénarios qui impliquent des structures avec des pointeurs dans leur
- La Performance est critique de code
L'utilisation de dangereux contexte dans d'autres situations est découragé.
Plus précisément, un dangereux contexte ne devrait pas être utilisé pour tenter d'écrire du code C en C#.
Attention:
Le Code écrit à l'aide d'un dangereux ne peuvent pas être vérifiés pour être en sécurité, de sorte qu'il sera exécuté uniquement lorsque le code est entièrement fiable. En d'autres termes, le code unsafe ne peut pas être exécuté dans un environnement non sécurisé. Par exemple, vous ne pouvez pas exécuter le code unsafe directement à partir de l'Internet.
Si vous devez.
Dire que vous devez en fausses couleurs d'une grande image en niveaux de gris, dire 2000x2000 pixels. Premier à écrire le " sûr " version à l'aide d' GetPixel()
et SetPixel()
. Si cela fonctionne, grand, aller de l'avant. si cela s'avère trop lent, vous devrez peut-être obtenir les bits qui composent l'image (oublier au sujet de la Couleur des matrices pour le bien de l'exemple). Il n'y a rien de "mauvais" sur l'utilisation de code non sécurisé, mais il ajoute à la complexité du projet et doit donc être utilisé uniquement lorsque cela est nécessaire.
Je ne me souviens pas d'avoir jamais eu à le faire - mais je n'ai pas fait beaucoup d'interopérabilité. C'est l'application la plus commune, je crois: appel en code natif. Il y a très peu de fois où à l'aide de pointeurs permet d'optimiser un peu de code, mais c'est assez rare dans mon expérience.
Si c'est un guide, je me considère assez expérimenté en C# mais si je devais le faire tout le code unsafe, je serais obligé de consulter le spec/livres/MSDN pour me guider. Bien sûr, il y aura beaucoup de gens qui sont heureux avec le code unsafe mais moins familier avec (par exemple) les expressions de requête...
Le code Unsafe est entièrement pris en charge la fonction de l' .NET CLR. Les avantages sont la performance et la compatibilité avec le code binaire. Le runtime est un bac à sable qui vous empêche de s'écraser et de brûler, mais qui a un coût. Dans les situations où vous faites extrêmement intensive des opérations contre les grosses gouttes dans la mémoire, par exemple de manipulation de l'image, il est plus rapide d'une étape à l'extérieur de la normale de sécurité du runtime fournit.
Cela dit, je pense que la plupart des gens d'ici n'dire "ne fais pas cela". La grande majorité des .NET développeurs ne fonctionnera pas dans un cas normal des activités qui ne peuvent être résolus à l'aide de code unsafe.