2009-03-08 3 views
8

Existe-t-il un outil qui peut analyser votre code et déterminer quels objets qui implémentent IDisposable ne sont pas disposés dans une base de code au moment de la compilation ou de l'exécution?Suivi des objets jetables non mis à jour

J'ai des zones possibles dans le code qui ne disposent pas d'objets, mais il est difficile de regarder en arrière et de voir quels objets en ont besoin en premier lieu.

Répondre

8

Il y a beaucoup d'outils d'analyse statique, ce qui peut aider ici.

CodeRush/Refactor Pro et Resharper afficheront tous les deux des objets non-installés au moment du code dans Visual Studio. Et FxCop, maintenant empaqueté dans le cadre de Visual Studio Code Analysis, peut générer des avertissements de temps de compilation pour les résidents non-résidents et les membres de la classe.

+1

+1, mais à quel point est-ce fiable? –

+0

Je vais considérer cela comme la réponse après avoir essayé Resharper et ces autres outils. J'aimerais que cette question reste ouverte pour avoir plus d'idées, mais j'apprécie la réponse. +1 pour vous –

+0

Comment/où Resharper vous le montre-t-il? –

-1

Le destructeur d'une classe est appelé lorsque le garbage collector nettoie enfin les classes qui ne sont plus utilisées. Ce que vous pouvez faire est de mettre une vérification dans le destructeur que "Dispose" a été appelé. Il est déconseillé d'utiliser réellement le destructeur, mais à des fins de test, il peut être utile. Le seul problème avec cette méthode est que vous devrez créer votre propre classe qui hérite de celle que vous avez besoin de tester pour IDispose et remplacer la méthode Dispose (ainsi vous pouvez définir un drapeau disant qu'il a été appelé) , initialiser le drapeau dans un constructeur et vérifier dans le destructor (que vous mettre en œuvre avec « ~ ClassName() {...} »)

+1

Est-ce que quelqu'un pourrait commenter pourquoi cette réponse a été downvoted? Est-ce que ce n'est pas fiable? – Eric

+0

Ce n'est pas forcément une bonne solution (il est nécessaire d'ajouter des finaliseurs aux objets uniquement à des fins de test), mais je ne pense pas que cela devrait être downvoted. Il existe des précédents d'utilisation de finaliseurs pour faciliter le débogage, tels que la façon dont les tâches TPL vont lancer des exceptions non gérées dans leur finaliseur si l'exception n'a jamais été observée dans un contexte plus contrôlé. –

+0

@DanBryant En plus de cela, la mise en œuvre des finaliseurs a pour effet secondaire que vos objets survivent à au moins un cycle de GC, ce qui peut avoir un impact négatif sur les performances. – aevitas

Questions connexes