¿El tamaño de un conjunto .net afecta el rendimiento? ¿Qué hay de la cantidad de ensambles en su formulario de Windows/formularios web?¿El tamaño de ensamblado .NET afecta el rendimiento?
Respuesta
de los patrones de Microsoft & Prácticas Improving .NET Application Performance and Scalability Capítulo 5:
Prefiero individual grande varios ensamblados bastante que pequeñas asambleas
Para ayudar a reducir el espacio de trabajo de su aplicación, se debe preferir individuales más grandes asambleas en lugar de múltiples conjuntos más pequeños. Si tiene varios conjuntos que siempre se cargan juntos, debe combinarlos y crear un único conjunto .
la sobrecarga asociada con tener múltiples conjuntos más pequeños se puede atribuir a lo siguiente:
- El costo de metadatos de carga para conjuntos más pequeños.
- Tocar varias páginas de memoria en imágenes precompiladas en el CLR en orden para cargar el conjunto (si está precompilado con Ngen.exe).
- JIT tiempo de compilación.
- Controles de seguridad.
Debido a que se paga sólo las páginas de memoria accede a su programa, más grandes asambleas proporcionan la utilidad Generador de imágenes nativas (Ngen.exe) con una mayor oportunidad de optimizar la imagen nativa que produce. Una mejor disposición de la imagen significa que los datos necesarios se pueden presentar de forma más densa, lo que a su vez significa que se necesitan menos páginas totales para hacer el trabajo en comparación con el mismo código establecido en múltiples ensamblajes .
A veces no puede evitar la división de conjuntos; por ejemplo, para versiones y razones de implementación. Si necesita enviar tipos por separado, puede necesitar ensamblajes por separado.
Una cosa que sé que van a afectar a su rendimiento, en relación con el tamaño de la asamblea, al menos si el tamaño del conjunto está relacionado con el número de clases, métodos, etc.
Si utiliza la reflexión y utiliza un bucle como para todos conjuntos, para todos los tipos en esos conjuntos, compruebe si tienen atributos, etc.. Esto podría JIT constructores estáticos y llamarlos en algunos casos.
Ah, vi la respuesta de Jon, se me olvidó mencionar. JIT'ing de código solo ocurrirá una vez por pieza de código, por supuesto, así que si todo lo que haces es reflejar sobre los tipos, y nunca tocarlos después, el tamaño del conjunto afectará la duración de ese ciclo de reflexión, pero después de eso no debería importar en absoluto.
Bueno, cada vez que un ensamblado se carga habrá alguna éxito debido a la pena de resolución - encontrar el archivo correcto, lo que podría verificar el número de versión, etc. Esto es probable que sea principalmente en el arranque.
Sin embargo, no creo que afecte significativamente el rendimiento del "estado estable".
Dudo mucho que afecte el rendimiento en cualquier grado mensurable. Habrá alguna penalización por cargarlo al inicio; y el uso de la memoria probablemente se incrementará en un MB o dos, pero aparte de eso, no. Bueno, a menos que hagas código que sufra debido a esto tú mismo.
Dicho esto, no he visto ninguna prueba, por lo que podría estar equivocado.
No, no afecta a
nunca he encontrado un éxito significativo para el rendimiento que localicé a cualquier tamaño o número de conjuntos. La gran mayoría de los problemas de rendimiento significativos que he rastreado han sido el resultado de debilidades algorítmicas.
Como dice Jon Skeet, es probable que haya un pequeño golpe debido a la resolución en el arranque. lassevk también tiene un punto sobre la resolución dinámica de ensamblajes a través de la reflexión. Sin embargo, ninguno de estos debería afectar el rendimiento más de una vez en el transcurso del programa y, en el curso normal de las cosas, probablemente no sea un rendimiento significativo a menos que trabaje bajo algunas limitaciones de desempeño terriblemente estrictas.
Quizás algún contexto adicional en cuanto al problema sería útil. ¿Hace esta pregunta porque tiene un software con muchos ensamblajes grandes y está tratando de acelerarlo, por ejemplo?
Un DLL de estructura compacta siempre se cargará en un espacio de memoria mínimo de 64 kb, sin importar cuán pequeño sea. Por lo tanto, cargar cuatro archivos DLL de CF separados de 10 kb le costará 256 kb en el dispositivo. Si los combina (ILMerge), solo le costaría 64 kb de memoria en el dispositivo.
estoy de acuerdo con la respuesta de Dan y sólo para añadir un poco más de información: aquí hay otra entrada de blog relevante para apoyar este punto de vista: http://blogs.msdn.com/junfeng/archive/2004/02/23/78139.aspx
variables locales no utilizados y las tareas innecesarias aumentar el tamaño de una asamblea y degradar el rendimiento .
- 1. ¿El tamaño de la tabla afecta el rendimiento de INSERTAR?
- 2. ¿La ofuscación afecta el rendimiento?
- 3. ¿El tamaño de un archivo jar afecta el rendimiento de la JVM?
- 4. z-index, ¿cómo afecta el rendimiento?
- 5. ¿Por qué el orden de JIT afecta el rendimiento?
- 6. ¿El número de columnas afecta el rendimiento de la consulta?
- 7. ¿El uso de un marco PHP afecta el rendimiento?
- 8. ¿El uso de funciones anónimas afecta el rendimiento?
- 9. ¿Qué es el aliasing y cómo afecta el rendimiento?
- 10. ¿El tamaño del campo afecta el tiempo de consulta?
- 11. ¿La cantidad de espacios de nombres afecta el rendimiento?
- 12. ¿Restrinja el acceso al ensamblado de .NET?
- 13. ¿El límite máximo de la propiedad de configuración MaxReceivedMessageSize en wcf afecta el rendimiento del servicio?
- 14. En SQL, ¿cómo afecta el uso de DISTINCT al rendimiento?
- 15. ¿La colocación de un bloque try-catch afecta el rendimiento?
- 16. ¿El tamaño de fuente afecta la representación de ligaduras?
- 17. Obtenga el valor AssemblyInformationalVersion del ensamblado .NET
- 18. Cargando el ensamblado WinRT desde .NET
- 19. ¿Cómo afecta la llamada al método el rendimiento en Java?
- 20. ¿Cómo afecta la reflexión el tamaño de Permanente?
- 21. ¿Cómo afecta la cláusula IN el rendimiento en Oracle?
- 22. ¿El uso de espacios de nombres afecta el rendimiento o el tiempo de compilación?
- 23. Android: TextView.setTextAppearance() no afecta el tamaño del texto
- 24. ¿Fijar un objeto en el LOH afecta el rendimiento del GC?
- 25. ¿Existen consideraciones de rendimiento al hacer referencia a un ensamblado .Net de 5 MB?
- 26. ¿El uso extenso de señales y ranuras afecta el rendimiento de la aplicación?
- 27. ¿El orden de las condiciones en una cláusula WHERE afecta el rendimiento de MySQL?
- 28. ¿Cómo usar el ensamblado .Net de Win32 sin registro?
- 29. Una buena forma de precargar el ensamblado .NET
- 30. Averigüe el tamaño de un objeto .net
preguntando en general, estaba leyendo material de marketing para ofuscadores y dicen que recortan el conjunto que es bueno para el rendimiento. – Blankman
En ese caso, diría que probablemente estabas leyendo algo escrito por el equipo de marketing de ofuscadores, no de un equipo técnico con números para respaldar sus afirmaciones. :) –