Статическое/Динамичное Динамическое подключение

Вы упоминаете Python 3.5 (который не является последней версией), для которого документы говорят:

popitem ()
[ 113] Удалить и вернуть произвольную пару (ключ, значение) из словаря.

blockquote>

где произвольный означает зависимый от реализации (возможно, основанный на PYTHONHASHSEED ), но не обязательно случайный или LIFO.

Так как последний Python 3.7, как упоминает @iBug, это LIFO .

5
задан Carl Walsh 30 November 2017 в 19:52
поделиться

3 ответа

Динамические каналы позволяют Вам обновлять отдельный DLLs, не перекомпилировав Ваши приложения. Именно поэтому окна могут быть обновлены без Вашего перекомпилированного приложения, потому что динамический компоновщик может определить точки входа в dll, при условии, что имя метода существует.

Статически соединение Вашего приложения обладает преимуществом в этом, звонит в связанный код, не indirected, таким образом, они работают быстрее. Это может оказать влияние на чрезвычайно зависимый код производительности.

Используя DLLs может также помочь Вам уменьшить свой объем потребляемой памяти, так эффективно Вы только загружаете библиотеки, как Вам нужны они, и можно разгрузить их, когда сделанный (думают плагины приложения, только загружают библиотеку просмотра изображения, когда у Вас есть изображение, открытое и т.д.),

Править: Robert Gamble добавил комментарий, который я пропустил: DLLs загружаются в память, совместно использованную всеми процессами в операционных системах. Это означает, используют ли две программы (или два экземпляра Вашей программы) тот же DLL, они будут использовать тот же DLL, загруженный в память, которая далее уменьшит Ваше полное использование памяти.

5
ответ дан 14 December 2019 в 13:49
поделиться

Очевидное преимущество для dll состоит в том, что можно обновить отдельные компоненты не только целое приложение (в теории) и совместно использовать общие компоненты (путем инкапсуляции их в dlls). К сожалению, на практике существует определенное количество привязки между dll (s) (даже когда определено хорошо). Это приводит Вас должны обновлять dll в соответствии наборам и изоляции dlls, которые не делают никакой игры хорошо вместе.

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

В реальной жизни приложение имеет тенденцию помещать весь dlls, который они используют в том же каталоге в качестве исполняемого файла. Это позволяет обновлять, но не способствует совместному использованию. Обновление затем состоит из обновления наборов DLL в каталоге приложения в синхронизации с ним DLL в центральном репозитории окон.

0
ответ дан 14 December 2019 в 13:49
поделиться

DLLs может сделать для меньшего времени выполнения workingset, если бы приложение было записано таким способом как для управления контекстным переключением между DLLs (Например, для объемных приложений, то Вы могли разделить функциональность приложений на логические границы, которые будут реализованы в автономном DLLs, и позволить загрузчику загружаться во времени выполнения).

В то время как это верно, что DLLs, прежде всего, устанавливаются/копируются в ту же папку как .exe, требование состоит в том, чтобы придерживаться загрузчиков, загружающих правила (который включает системную папку (плохая идея), ПУТЬ, текущий каталог [см. документацию Справки LoadLibrary API для полного описания приоритета]).

Вы "добавили" комментарий относительно Библиотечных файлов. И в Динамичном и в Статичном, Вы связываете Библиотечные файлы использования. Но в случае динамической загрузки Вы поставляете .exe наряду со всем зависимым DLLs (Библиотечные файлы содержат экспортируемые точки входа для соответствующего DLL).

Я предпочитаю DLLs, поскольку мои приложения имеют тенденцию быть больше и сегментированными, и это позволяет мне поставлять ТОЛЬКО те обновленные компоненты (DLLs). Мы даже разделяем бизнес-логику от презентации в их собственном DLLs [локализация разрешений dll независимого политика только для ресурса логики.

Программирование использования DLLs ДЕЙСТВИТЕЛЬНО заставляет Вас вынуждать себя придерживаться контракта экспортируемого класса/метода или функции.

1
ответ дан 14 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: