33 votes

Resharper peut-il être configuré pour avertir si IDisposable n'est pas géré correctement?

Existe-t-il un paramètre dans Resharper 4 (ou même dans Visual Studio lui-même ...) qui force un avertissement si j'oublie de mettre le code dans un bloc using ou omet le bon appel Dispose dans un finally bloc?

29voto

Ilya Ryzhenkov Points 5731

Automatique correcte Disposer d'analyse nécessite des DFA (Analyse de Flux de Données) de manière globale. Il est peu probable que vous créez un IDisposable objet et ne pas appeler n'importe quelle méthode sur elle et de ne pas les passer en argument. Si jetables objet est passé à d'autres méthodes (y compris l'appel de ses membres, lorsque "cela" est implicitement passé), l'outil doit analyser si dispose n'est pas appelée à l'intérieur, ou que l'objet n'est pas stocké quelque part pour élimination ultérieure.

Cela dit, implémentation naïve de vérifier si jetables objet est en fait disposé avec "l'aide" de construire ou de toute autre manière donnerait trop de faux positifs, et de rendre l'analyse inutile.

6voto

kizzx2 Points 6919

Mécontent des méthodes actuelles, j'ai créé le mien: EyeDisposable . C'est un instrumentateur IL donc il devrait attraper de nombreuses fuites non détectées par l'analyse statique. Il est encore à ses débuts, les inpuits sont les bienvenus.

5voto

Kilhoffer Points 13430

Pas hors de la boîte. Cela ne veut pas dire que vous ne pouvez pas l'étendre, cependant.

Cette discussion indique que l’appel de Dispose sur des tests unitaires a toutefois été envisagé.

2voto

user15749 Points 201

Vous pouvez concevoir un petit complément à R # que vous auriez pu exécuter dans l'éditeur de code qui analyse le code et met à jour l'analyse de code afin de refléter le fait que vous êtes un objet manquant de la structure que vous venez de décrire.

Je regarderais dans l'architecture du plugin R # si vous décidiez de suivre cette voie.

2voto

Jay Bazuzi Points 20462

Voir ce billet de blog pour quelques astuces pour tester Dispose() en DEBUG . Fondamentalement, écrivez un destructeur réservé à DEBUG qui affirme que vous avez été supprimé.

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