studio - ejecutar c# desde cmd
¿El compilador solo compilará el código que se puede ejecutar? (5)
Dudo que el compilador elimine nada. El hecho es que el compilador no puede decir qué se usa y qué no, ya que los tipos se pueden instanciar y los métodos se llaman por nombre, gracias a la reflexión.
Tengo una biblioteca de clase y estoy usando solo una parte de ella. ¿Existe la necesidad de eliminar lo que no se usa para reducir el tamaño del código creado (en la configuración de lanzamiento)?
Por lo que he visto, el compilador se encarga de eso, y eliminar el código no cambia el tamaño del archivo EXE. ¿Esto siempre será cierto? Eliminar todo el código innecesario llevaría mucho tiempo, por lo que quiero saber si es necesario.
Más información: hay métodos y clases en la biblioteca de clases que no son llamados desde el código de ejecución, sino que son referenciados por otras partes del código en la biblioteca de clases (que nunca se llaman).
Todo se compila. Independientemente de si se llama o no. El código puede ser llamado por una biblioteca externa.
La única forma de hacer que el compilador ignore el código es mediante el uso de Directivas de preprocesador de compilador. Más sobre ésos aquí .
Supongamos que hay una biblioteca de clases llamada Utility
. Usted creó un nuevo proyecto y agregó esta biblioteca de clase a ese proyecto. Incluso si su EXE llama solo a 1-2 métodos de la biblioteca de la clase, nunca es una buena idea eliminar el código sin referencia.
Iría en contra del principio de reusablity. A pesar del hecho de que habría algunas clases presentes en la biblioteca sin referencia del EXE, no tendría ningún impacto negativo en el rendimiento o el tamaño del programa.
Determinar todo y solo el código muerto es (si uno hace la idealización de que uno tiene un "mundo matemático" como el lenguaje) recursivamente indecidible, en la mayoría de los idiomas. (Algunos pocos raros como el lenguaje Blaise son decidibles).
No, el compilador también incluye el código "muerto". Una razón simple para esto es que no siempre es posible saber exactamente qué código se ejecutará o no. Por ejemplo, incluso un método privado al que nunca se hace referencia se puede llamar mediante reflexión, y los ensambles externos pueden hacer referencia a los métodos públicos.
Puede utilizar una herramienta para ayudarlo a encontrar y eliminar métodos no utilizados (incluidos los que solo se invocan mediante otros métodos no utilizados). Intente ¿Qué herramientas y técnicas usa para encontrar el código muerto? y Encuentra el código no utilizado para que comiences.