2010-02-10 29 views

Respuesta

4

Una ventaja es para admitir una arquitectura de complemento.

Supongamos, por ejemplo, que desea escribir un servicio que realice diferentes tipos de tareas de forma programada. Lo que esas tareas están haciendo, no es realmente relevante para su servicio central, que está allí para darles el puntapié en el momento correcto. Además, es más que probable que desee agregar soporte para realizar otros tipos de tareas en el futuro (o puede que otro desarrollador lo desee). En ese escenario, al implementar un enfoque de complemento, le permite agregar más (compatibles por interfaz) dlls que pueden codificarse independientemente del servicio central. Por lo tanto, agregar soporte para una nueva tarea no requiere una nueva compilación/implementación de todo el servicio. Si una tarea en particular necesita cambiar, solo esa dll necesita volverse a desplegar y luego recogerse automáticamente.

También requiere que otros desarrolladores no se preocupen por el servicio ellos mismos, solo necesitan saber qué interfaz implementar para que pueda ser recogido.

+0

¿Qué sucede si su sistema es un sistema de tipo arquitectónico que no requiere complementos? ¿Qué otras ventajas serían? – James

+0

Las únicas veces que lo he hecho es dentro de una arquitectura de complemento tbh. No puedo pensar en otra razón por la que más lo consideraría de otra manera. Tal vez algún tipo de propósito de seguridad, es decir, solo cargue dlls que brinden la funcionalidad a la que se permite el acceso de un determinado usuario. ¡Pero ni siquiera estoy seguro de que sea un enfoque válido para controlar simplemente otras formas de código! – AdaTheDev

+0

¿Qué hay del rendimiento? ¿Importa que tenga una DLL cargada cuando, en realidad, solo la utilizará con poca frecuencia? – James

1

La carga de objetos compartidos dinámicamente es el mecanismo para permitir los complementos ad hoc para ejecutar aplicaciones. Sin complementos, una aplicación modular tendría que juntarse en tiempo de enlace o compilación (mire el código de nginx).

1

Su pregunta es acerca de C# /. NET por lo que en este mundo, la carga dinámica de DLL requiere habilidades avanzadas de programación. Esto podría compensar todos los beneficios potenciales de la carga dinámica de DLL. Simplemente tendría que escribir un código de "bajo nivel".

En C++/Win32, a menudo tengo que cargar una DLL dinámicamente cuando esta DLL tiene alguna función API nueva que no está disponible en sistemas operativos más antiguos. En este caso, necesito asegurar la disponibilidad de esta API en tiempo de ejecución. No puedo vincularme con esta DLL porque causará errores de carga de aplicaciones en sistemas operativos heredados.

Como se mencionó, también podría tener algunos beneficios en un entorno basado en complementos. En este caso, tendría más control sobre sus recursos si carga archivos DLL de forma dinámica. Básicamente, COM es un buen ejemplo de entrega dinámica de DLL.

2

Utilizamos esta arquitectura para que nuestras aplicaciones de procesamiento manejen las diferencias que requieren nuestros clientes. Cada DLL tiene una estructura similar e implementa la misma interfaz y método de entrada "Process()". Tenemos un archivo XML que define qué clase cargar según el cliente y si hay más métodos además del proceso que necesita ser llamado. El rendimiento no debería ser un problema hasta que su recuento de transacciones sea muy alto.

1

Si solo carga las DLL que necesita, entonces el tiempo de inicio de la aplicación debería ser más rápido.

0

Otra razón para cargar archivos DLL de forma dinámica es la solidez.

Es posible cargar una DLL en lo que se conoce como AppDomain. Un dominio de aplicación es básicamente un contenedor de caja de arena en el que puede poner cosas (ya sea porciones de DLL o EXEs completos) para ejecutar de forma aislada, pero dentro de su aplicación.

A menos que llame a un tipo contenido dentro de un Dominio de aplicación, no tiene forma de interactuar con su aplicación.

Por lo tanto, si tiene una DLL de terceros dudosa o una DLL para la que no tiene el código fuente, puede cargarla en un dominio de aplicación para mantenerla aislada del flujo de la aplicación principal.

El resultado final es que si el DLL de terceros arroja un tambaleo, solo se ve afectado el dominio de aplicación y no toda su aplicación.

Cuestiones relacionadas