Вызов C ++ dll из .Net-кода мучительно медленен, когда подключен отладчик - PullRequest
2 голосов
/ 08 февраля 2011

Я использую VS 2008 для компиляции и отладки моего кода.В моем приложении интерфейс - C #, интерфейс - C ++.Я получаю доступ к коду C ++ через взаимодействие.

Одна вещь, которую я замечаю, это то, что если я нажму F5 и укажу ссылку на отладочную версию нативного кода, для запуска нативного кода потребуется более 20 секунд.Если я добавлю ссылку на версию выпуска собственного кода, время, необходимое для его выполнения, сократится до 7-8 секунд.

И если у меня не подключен отладчик VS 2008 (т. Е. Я нажимаюв exe-файле за пределами IDE), и я делаю ссылку в версии выпуска кода C ++, для запуска кода C ++ требуется всего 1 секунда.

Обратите внимание, что для всего тестирования ввод в код C ++всегда всегда одинаковы.

Наверняка, есть некоторые накладные расходы, связанные с вложением отладчика и отладочной сборкой.Но разница в производительности слишком велика.Могу ли я что-то пропустить или я могу настроиться?

Я нахожу, что это очень озадачивает;C # в моем опыте не вносит такой большой нагрузки, независимо от того, работаете ли вы с отладчиком или в режиме отладки.

1 Ответ

3 голосов
/ 08 февраля 2011

Моим лучшим предположением будет то, что загрузка символов отладки замедляет вас. Я видел, что то же самое происходит с чисто неуправляемыми проектами C ++, которые настроены на автоматическую загрузку файлов символов для всех системных библиотек Windows. Убедитесь, что вы не загружаете автоматически символы отладки:

  1. В меню «Инструменты» нажмите «Параметры».
  2. Разверните категорию «Отладка» влево и выберите подкатегорию «Символы».
  3. Установите флажок с надписью «Искать в вышеуказанных местах только при ручной загрузке символов».

Check


Кроме того, учтите, что отладка в смешанном режиме чрезвычайно медленная.

Если вам не требуется возможность входить в код в C ++ DLL, вы можете попробовать отключить опцию «Включить отладку неуправляемого кода» в свойствах вашего проекта:

Uncheck

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