Вызов в другую DLL занимает больше времени, чем следует

Я добавил следующие функциональные возможности в существующее приложение C ++:

  1. Сторонняя DLL загружается через LoadLibraryA (…)
  2. Указатель на функцию получается из DLL через GetProcAddress (…)
  3. Функция называется

Хотя это в основном работает (функция называется alight и выдает ожидаемый результат), есть одна главная проблема: вызов функции (в 3.) очень медленный. Выполнение занимает более 300 мс (!), А должно быть менее 1 мс.

Поэтому я создал новое пустое приложение C ++ и скопировал код поверх. Таким образом, шаги с 1 по 3 выполняются точно так же, как и в другом приложении. Функция делает то же самое и дает те же результаты. Но выполнение намного быстрее: менее 1 мс, как и ожидалось.

Еще несколько наблюдений, которые я сделал:

  • Оба результата воспроизводимы на 100%.
  • Оба приложения имеют одинаковые настройки компилятора / компоновщика.
  • Проблемы с потоками / производительностью, похоже, не являются проблемой, поскольку в обоих приложениях код выполняется в основном потоке при очень низкой загрузке ЦП (больше ничего не происходит). Кроме того, результаты воспроизводимы, что исключает такого рода проблемы времени.
  • Каждый вызов в DLL занимает не менее 300 мс в моем первом приложении, в то время как в другом — быстрый. Таким образом, поведение не ограничивается одной функцией.
  • Не имеет значения, использую ли я отладочную или выпускную сборку.
  • Оба приложения и сторонние DLL являются 32-битными.

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

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]