Каковы преимущества динамической загрузки DLL? - PullRequest
6 голосов
/ 10 февраля 2010

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

Ответы [ 6 ]

4 голосов
/ 10 февраля 2010

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

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

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

2 голосов
/ 10 февраля 2010

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

1 голос
/ 10 февраля 2010

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

1 голос
/ 10 февраля 2010

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

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

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

1 голос
/ 10 февраля 2010

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

0 голосов
/ 03 декабря 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...