Question

Vous recherchez les avantages des DLL de chargement dynamique plutôt que de laisser votre application charger les DLL par défaut.

Était-ce utile?

La solution

Un avantage est pour supporter une architecture de plug-in.

Supposons par exemple que vous voulez écrire un service qui effectue différents types de tâches sur une base régulière. Ce que ces tâches font, ne sont pas réellement pertinents à votre service de base qui est juste là pour les lancer au bon moment. Et, il est plus que probable que vous voulez ajouter le support pour faire d'autres types de tâches à l'avenir (ou un autre développeur pourrait vouloir). Dans ce scénario, en mettant en œuvre une approche plug-in, il vous permet de déposer en plus (compatible par l'interface) dll qui peut être codé indépendamment du service de base. Ainsi, en ajoutant à l'appui d'une nouvelle tâche ne nécessite pas une nouvelle construction / déploiement de l'ensemble du service. Si une tâche particulière doit changer, juste que dll doit être redéployés puis repris automatiquement.

Il faut également d'autres développeurs de ne pas être concernés par le service eux-mêmes, ils ont juste besoin de savoir ce que l'interface pour mettre en œuvre afin qu'il puisse être repris.

Autres conseils

Nous utilisons cette architecture pour nos applications de traitement pour gérer les différences qui nécessitent nos différents clients. Chaque DLL a une structure similaire et met en oeuvre la même interface et méthode d'entrée « Process () ». Nous avons un fichier XML qui définit quelle classe à charge en fonction du client et s'il y a des méthodes plus en plus processus qui doit être appelé. Performance ne devrait pas être un problème jusqu'à ce que votre nombre de transactions devient très élevé.

Chargement objets partagés dynamiquement le mécanisme pour permettre des plugins ad hoc pour les applications en cours d'exécution. Sans plug-ins une application modulaire devrait être mis en place au lien temps ou la compilation (regardez le code de nginx).

Votre question est sur C # /. NET donc dans ce chargement de DLL monde dynamique nécessite des compétences de programmation avancées. Cela pourrait compenser tous les avantages potentiels de chargement de DLL dynamique. Vous auriez tout simplement d'écrire beaucoup de code « bas niveau ».

En C ++ / Win32 Je dois souvent charger un DLL dynamiquement lorsque cette DLL a une nouvelle fonction API qui ne sont pas disponibles sur les systèmes d'exploitation plus anciens. Dans ce cas, je dois assurer la disponibilité de cette API lors de l'exécution. Je ne peux pas juste un lien contre cette DLL, car il provoque des erreurs de chargement de l'application sur les systèmes d'exploitation existants.

Comme mentionné précédemment, vous pourriez aussi avoir des avantages dans un environnement basé sur le plugin. Dans ce cas, vous auriez plus de contrôle sur vos ressources si les DLL de chargement dynamique. Essentiellement COM est un bon exemple de la remise de DLL dynamique.

Si vous chargez uniquement les DLL dont vous avez besoin alors le StartupTime de l'application devrait être plus rapide.

Une autre raison de charger de manière dynamique pour la robustesse DLL.

Il est possible de charger une DLL dans ce qui est connu comme un AppDomain. Un appdomain est essentiellement un conteneur de bac à sable que vous pouvez mettre les choses en (Soit parties de EXEs DLL ou entier) pour exécuter de façon isolée, mais dans votre application.

À moins que vous appelez dans un type contenu dans un AppDomain, il n'a aucun moyen d'interagir avec votre application.

Donc, si vous avez un DLL tiers douteux, ou une DLL que vous n'avez pas autrement le code source, vous pouvez le charger dans un AppDomain pour le garder isolé de votre flux principal de l'application.

Le résultat final est que si la DLL tiers jette un bancal, seul le appdomain, et non votre application entière est affectée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top