El sistema de seguridad en .NET es bastante complejo. No estoy seguro de que la respuesta sea tan simple como puede parecer a primera vista. Incluso en el caso de que tenga un ensamblaje único, las comprobaciones de seguridad aún se realizan. Cuando inicia una aplicación que tiene toda la lógica en un solo .exe, no omite las comprobaciones de seguridad de .NET para la carga y verificación del ensamblaje, ni omite las comprobaciones de tipo de herencia. Sin embargo, una vez que la seguridad ha sido verificada para un alcance determinado, generalmente no ocurre nuevamente (puede haber algunas circunstancias atenuantes que obligarían a volver a verificar la evidencia).
Los ensambles múltiples no se comportarán de manera diferente. Puede haber algún costo de carga de ensamblaje adicional y costo de acceso de tipo inicial, ya que cada ensamblaje nuevo requerirá esas comprobaciones de seguridad iniciales. Sin embargo, esos controles generalmente palidecerán en comparación con el proceso de JITting el código mismo.
Más allá de la carga del ensamblaje básico y las comprobaciones de seguridad del tipo, también puede tener demandas de permisos explícitos. Microsofts Los espacios de nombres del sistema están plagados de Demand y de comprobaciones de seguridad de LinkDemand que verifican que todos los que llaman suban la pila (demanda) o que la persona que llama inmediatamente (demanda de enlace) tenga permiso para realizar la llamada. (Su código también debe incluir tales comprobaciones para validar que las personas que llaman también cuenten con el permiso correspondiente). Estas verificaciones de seguridad se realizarán independientemente de dónde viva el código ... localmente, en otro ensamblado o incluso en un ensamblado en otro dominio de aplicación . Sin embargo, una vez que ingresa en llamadas hechas a otros dominios o procesos de aplicaciones, o incluso a servicios y otros servidores, la carga de ordenar esas llamadas y hacer conexiones es mucho más costosa.
Esto ni siquiera es la imagen completa en lo que respecta a la seguridad de .NET. Algunos controles de seguridad son más costosos que otros. Algunos requieren una credencial, otros requieren evidencia, etc. La seguridad no es algo que se pueda eludir ... es un componente esencial y crítico del desarrollo de software moderno. No me preocuparía tanto por el costo de la seguridad ... ya que está bien implementado y bien optimizado en .NET framework y CLR. Me gustaría esforzarme para garantizar que su aplicación esté correctamente estructurada y organizada.Si es lógico separar el código en varios ensambles, se reduce el esfuerzo de mantenimiento, despliegue y refactorización, entonces vale la pena el pequeño costo adicional para la seguridad.
@Andrew: Listo. – dewald