Pregunta

Hay un ajuste en Resharper 4 (o incluso Visual Studio...) que obliga a una advertencia si se me olvida a envolver el código en un using bloque, o ommit el adecuado Disponer de llamada en un finally bloque?

¿Fue útil?

Solución

Automática correcta Disponer de análisis requiere de la DFA (Flujo de Datos de Análisis) de manera global.Es poco probable que cree una IDisposable objeto y no llamar a cualquier método y no pasan alrededor de un argumento.Si desechables objeto se pasa a otros métodos (incluyendo llamadas telefónicas a sus miembros, cuando "esto" es implícitamente pasado), la herramienta debe analizar si no se llama a Dispose dentro de, o que el objeto no es almacenado en algún lugar para su eliminación posterior.

Dicho esto, ingenuo de la implementación de la comprobación de si el objeto desechable es en el hecho de tirarse con el "uso" de la construcción o en cualquier otra forma daría demasiado falsos positivos, y de procesamiento de análisis de inútil.

Otros consejos

El descontento con los métodos actuales, he creado mi propia: EyeDisposable.Es un IL instrumenter por lo que debe coger muchas fugas no se detecta por el análisis estático.Todavía en su etapa inicial, inpuits son bienvenidos.

Usted podría diseñar un pequeño complemento para R# de que usted podría tener ejecución dentro del editor de código que se escanea el código y actualiza el análisis de código para reflejar que un objeto que falta la estructura que acabamos de describir.

Me gustaría mirar en el R# arquitectura de plugin si usted decide ir por ese camino.

Ver este blog para algunos trucos para el análisis de Dispose() en DEBUG.Básicamente, escribir un DEBUG-sólo destructor, que afirma que fueron eliminados.

Es posible que desee buscar en FXCop para esto: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

Es una lástima R# no la maneja, incluso si sólo una advertencia para los campos en su clase y/o variables que se cree.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top