46 votes

Devez-vous utiliser des pointeurs (code dangereux) en C #?

Devriez-vous utiliser des pointeurs dans votre code C #? Quels sont les bénéfices? Est-il recommandé par The Man (Microsoft)?

40voto

nzpcmad Points 15270

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.

Référence

23voto

Ed S. Points 70246

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.

14voto

Jon Skeet Points 692016

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...

3voto

Rex M Points 80372

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.

3voto

Otávio Décio Points 44200

J'ai utilisé du code dangereux pour utiliser l'emprunt d'identité pour permettre aux services d'accéder aux partages réseau. Ce n'est pas un problème si vous savez ce que vous faites.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X