Unsafe : bien ou mal?

Résolu
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 - 20 août 2007 à 15:47
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 - 20 août 2007 à 16:49
Bonjour,

dans le cadre d'une fonction qui applique un filtre "brightness" sur une image, j'ai remplacé mon code qui était au départ 100% GDI+ par du code "unsafe".

Au départ, j'était assez réticent à l'utilisation de code unsafe, mais vu le gain de performance (le ration est à plus de 1:150...) je vais certainement garder le code unsafe...

Mais par simple curiosité, quels sont les inconvénients (s'il y en a) à inclure du code unsafe?
Le seul que je voit, c'est l'absence de contrôle du CLR sur les types, la mémoire, etc, mais à priori une fois que le code est testé/validé ça n'est plus vraiment un problème (ca revient -quasiment- à redescendre au niveau du C++, ce qui ne me dérange pas plus que ça).

Y'a t'il autre chose a craindre ou est ce que mes réticences à mettre du unsafe là où c'est nécessaire sont infondées?

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr

2 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 août 2007 à 16:03
Salut,

En gros la règle est de ne pas mettre de code unsafe sauf si c'est vraiment nécessaire.
Dans ton cas, si les performances sont un des aspects prioritaires du projet, le code unsafe est justifiable.
La BCL .NET elle même contient du code unsafe, le tout est de ne pas en mettre là où ce n'est pas réellement nécessaire.

Le terme unsafe n'est pas forcément à prendre dans le sens "dangereux", mais plutôt dans le sens "non vérifiable". Il n'y aura notamment pas de vérification de sécurité sur du code unsafe. Celà voudra aussi dire que ton assembly devra bénéficier d'un niveau de confiance suffisamment élevé, sinon le code ne s'executera pas.
Mais il garde aussi un aspect dangereux car tu ne dois pas oublier d'effectuer les vérifications d'usage sur les tailles de tableaux, de ne pas rater la gestion de la mémoire, faire attention que les objets pointés ne soient pas libérés etc etc (bref, les joies du C++)

Si tu veux en savoir plus, tu devrais regarder la section unsafe des specs du langage C#.

/*
coq
MVP Visual C#
CoqBlog
*/
3
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
20 août 2007 à 16:49
Il faudrait que je vérifie l'impact sur le niveau de confiance requis pour l'assembly, mais en l'occurence j'arrive à la déployer avec ClickOnce (qui a l'air assez restrictif quand aux droits fournis à l'application) et le code unsafe ne pause pas de problèmes...(ça s'install même sous Vista, c'est dire).

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
Rejoignez-nous