Что мы должны откладывать в ctypes? ctypes.open? Определения функций?

Для производительности, эффективности и т. д.: есть ли у ctypes.open большие накладные расходы? Должен ли он быть отложен до непосредственно перед использованием? Или это нормально, если я открываю как кучу dll прямо при загрузке моего аддона?

Cu.import('resource://gre/modules/ctypes.jsm');

var lib = {
  blah: ctypes.open('blah.dll'),
  ctypes.open('blah2.dll'),
  ctypes.open('blah3.dll'),
  ctypes.open('blah4.dll'),
  ctypes.open('blah5.dll'),
  ctypes.open('blah6.dll'),
};

for (var l in lib) {
  lib[l].close();
}

Должны ли мы также отложить определения функций или это легкий подъем, например:

var SetForegroundWindow = lib.user32.declare('SetForegroundWindow', ctypes.winapi_abi, ctypes.bool,
    ctypes.int32_t
);

Спасибо


person Noitidart    schedule 13.08.2014    source источник


Ответы (1)


Имеет (некоторый) смысл отложить загрузку dll, которая еще не сопоставлена ​​с виртуальным адресным пространством процесса firefox.

Но user32.dll является зависимостью от xul.dll.

Итак, когда вы ctypes.open('user32.dll') все, что происходит, это то, что счетчик ссылок конкретной dll увеличивается на единицу. Вряд ли тема оптимизации (преждевременной или нет).

person paa    schedule 13.08.2014
comment
Это интересно, спасибо, чувак. Как я могу узнать, использует ли ff определенную dll? Например, что бы я искал на mxr? Также этот парень делает ленивую загрузку объявлений функций ctypes, стоит ли заморачиваться? github.com/foudfou/FireTray/ blob/ и использует его здесь: github.com/foudfou/FireTray/search ?q=lazy_bind - person Noitidart; 14.08.2014
comment
Вы можете использовать свалку с параметром /depends. dumpbin поставляется с Windows SDK, но, вероятно, существует множество инструментов, которые сделают то же самое. Объявление функции в Windows приведет к вызову GetProcAddress. Опять же, я не понимаю, какие могут быть накладные расходы на поиск в таблице и инициализацию указателя на функцию. Если кто-то делает ленивую загрузку из принципа, меня это устраивает. - person paa; 14.08.2014
comment
Спасибо, чувак, я не собираюсь лениво загружать, тогда это слишком много дерьма, чтобы беспокоиться о нем, ха-ха. Я проверю dll. То же самое относится к * nix и mac, да? - person Noitidart; 14.08.2014
comment
Я думаю, что другие ОС имеют аналогичные реализации. Если вам нужен инструмент с графическим интерфейсом, попробуйте Dependency Walker. - person paa; 15.08.2014