Каковы преимущества динамической загрузки DLL?

ищет преимущества динамической загрузки DLL, а не позволяет приложению загружать DLL по умолчанию.

6 ответов


одним из преимуществ является поддержка архитектуры плагинов.

предположим, например, вы хотите написать службу, которая выполняет различные типы задач по расписанию. То, что эти задачи делают, на самом деле не имеет отношения к вашей основной службе, которая просто там, чтобы начать их в нужное время. И, скорее всего, вы хотите добавить поддержку для выполнения других типов задач в будущем (или другой разработчик может захотеть). В этом случае путем реализации плагина подход, он позволяет вам сбрасывать больше (совместимых интерфейсом) DLL, которые могут быть закодированы независимо от основной службы. Таким образом, добавление в поддержку новой задачи не требует новой сборки/развертывания всей службы. Если конкретная задача должна измениться, просто эту dll необходимо перераспределить, а затем автоматически забрать.

Это также требует, чтобы другие разработчики не были обеспокоены самим сервисом, им просто нужно знать, какой интерфейс реализовать, чтобы он мог быть подобранный.


мы используем эту архитектуру для наших приложений обработки для обработки различий, которые требуются нашим различным клиентам. Каждая DLL имеет аналогичную структуру и реализует один и тот же интерфейс и метод ввода "Process()". У нас есть XML-файл, который определяет, какой класс загружать на основе клиента и есть ли больше методов, кроме процесса, который необходимо вызвать. Производительность не должна быть проблемой, пока количество транзакций не станет очень высоким.


динамическая загрузка общих объектов-это механизм разрешения плагинов ad hoc для работы приложения. Без плагинов модульное приложение должно быть собрано во время ссылки или компиляции (посмотрите код nginx).


ваш вопрос о C# / .NET, поэтому в этом мире динамическая загрузка DLL требует передовых навыков программирования. Это может компенсировать все потенциальные преимущества динамической загрузки DLL. Вам просто нужно будет написать много кода "низкого уровня".

В C++ / Win32 мне часто приходится динамически загружать DLL, когда эта DLL имеет некоторую новую функцию API, которая недоступна в старых операционных системах. В этом случае мне нужно обеспечить доступность этого API во время выполнения. Я не могу просто связать против этой DLL, потому что это вызовет ошибки загрузки приложений на устаревших операционных системах.

Как уже упоминалось, вы также можете иметь некоторые преимущества в среде на основе плагинов. В этом случае у вас будет больше контроля над вашими ресурсами при динамической загрузке DLL. По сути, COM является хорошим примером динамической передачи DLL.


Если вы загружаете только необходимые DLL, то время запуска приложения должно быть быстрее.


еще одна причина для динамической загрузки DLL - это надежность.

можно загрузить DLL в то, что известно как AppDomain. Appdomain-это в основном контейнер для песка, в который вы можете помещать вещи (части DLL или целые EXEs) для работы в изоляции, но в вашем приложении.

Если вы не вызываете тип, содержащийся в AppDomain, он не может взаимодействовать с вашим приложением.

Итак, если у вас есть хитроумный третьих лиц DLL или DLL, для которой у вас нет исходного кода, Вы можете загрузить его в AppDomain, чтобы изолировать его от основного потока приложений.

конечный результат заключается в том, что если сторонняя DLL бросает шаткий, то затрагивается только appdomain, а не все ваше приложение.