Unsafe : bien ou mal? [Résolu]

Signaler
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
-
Nikoui
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
-
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

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
76
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
*/
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
8
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