Visual Studio 2008, советы по использованию библиотек времени выполнения - PullRequest
4 голосов
/ 04 августа 2009

Я хотел бы получить некоторую информацию о библиотеках времени выполнения для Visual Studio 2008. В частности, когда мне следует учитывать версии DLL и когда следует рассматривать статические версии.

Документация Visual Studio описывает технические различия с точки зрения зависимостей DLL и связанных библиотек. Но мне интересно, почему я должен использовать один поверх другого. Более важно, почему я должен хотеть использовать многопоточную среду выполнения DLL, когда это явно вынуждает мое приложение зависеть от DLL, тогда как статическая среда выполнения не имеет такого требования на моей машине пользователя приложения.

Ответы [ 4 ]

5 голосов
/ 04 августа 2009

Динамическое связывание с библиотеками времени выполнения немного усложняет развертывание из-за зависимости от DLL, но также позволяет приложению использовать обновления (исправления ошибок или более вероятные улучшения производительности) для библиотек времени выполнения MS без перекомпиляции.

Статическое связывание упрощает развертывание, но означает, что ваше приложение должно быть перекомпилировано с более новыми версиями среды выполнения, чтобы использовать их.

3 голосов
/ 04 августа 2009

Ларри Остерман считает, что вы должны всегда использовать многопоточную DLL для разработки приложений. Подведем итог:

  • Ваше приложение будет меньше
  • Ваше приложение будет загружаться быстрее
  • Ваше приложение будет поддерживать несколько потоков без изменения зависимости библиотеки
  • Ваше приложение легче разбить на несколько библиотек DLL (поскольку будет загружен только один экземпляр библиотеки времени выполнения)
  • Ваше приложение будет автоматически обновляться с помощью исправлений безопасности, поставляемых Microsoft

Пожалуйста, прочитайте его сообщение в блоге для полной информации.

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

1 голос
/ 04 августа 2009

Я думаю, что главное отличие состоит в том, как будут обрабатываться исключения. Microsoft не рекомендует связывать статически с ЭЛТ в DLL, если последствия этого не являются особенно желательными и понятными:

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

1 голос
/ 04 августа 2009

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

...