sintactico sharp semantico que programacion optimizacion lexico historia hacer descargar compilador como codigo caracteristicas analizador c# visual-studio-2008 visual-studio-2010 optimization compiler-construction

sharp - Optimización del compilador C#- Métodos no utilizados



optimizacion de codigo c# (4)

Acabo de comprobar en el reflector con una versión de lanzamiento. El compilador no elimina los métodos privados no utilizados.

Hay formas de usar un método sin el conocimiento del compilador, como con la reflexión. Así que el compilador no intenta adivinar. Simplemente deja los métodos allí.

Los únicos métodos privados que el compilador elimina son los métodos parciales sin implementación.

Para las optimizaciones del compilador de C #, mira here .

¿El compilador de C # (en VS2008 o VS2010) elimina los métodos no utilizados durante la compilación?

Supongo que puede tener problemas para decidir si se utilizarán los métodos públicos, por lo que supongo que compilará todos los métodos públicos.

Pero ¿qué pasa con los métodos privados que nunca se utilizan dentro de una clase?

EDITAR:

¿Hay un conjunto de reglas sobre la optimización del compilador que están documentadas en cualquier lugar?


El compilador no elimina ningún método del ensamblado, público o privado. De hecho, podría causar problemas extraños con la reflexión y evitar llamadas de tiempo de ejecución a tales métodos.

Hay una gran cantidad de marcos (como el analizador XAML) que le permiten llamar a métodos privados sin enlaces estáticos (piense en OnClick = "myFunction" en un archivo XAML). .. Pero el compilador no tiene información sobre tal comportamiento en tiempo de compilación.

El código dinámico sufre del mismo problema, la generación IL también. Y puede acceder a métodos privados desde cualquier objeto cuando se ejecuta con plena confianza.


Esta optimización se implementa de manera efectiva a nivel JIT, lo cual es bueno porque entonces funciona tanto para métodos públicos / privados como para cualquier otro. Si un método nunca se llama (ignorando ngen, etc.), nunca se pone JIT. Ahora podría decir que esto sigue siendo un desperdicio de espacio para los metadatos, etc. pero, como otros han señalado, lo privado no es tan privado.


No, no serán eliminados. Puede darte una advertencia para eso, pero no lo hará por sí mismo.