Преимущества / clr: pure
Лучшая производительность: поскольку чистые сборки содержат только MSIL, нет собственных функций, и поэтому нет необходимости в управляемых / неуправляемых переходах. (Вызовы функций, выполняемые через P / Invoke, являются исключением из этого правила.)
Осведомленность о домене приложений: управляемые функции и типы данных CLR существуют внутри доменов приложений, что влияет на их видимость и доступность. Чистые сборки учитывают домен (__declspec (appdomain) подразумевается для каждого типа), поэтому доступ к их типам и функциям из других компонентов .NET проще и безопаснее. В результате чистые сборки легче взаимодействуют с другими компонентами .NET, чем смешанные сборки.
Загрузка не на диск: чистые сборки можно загружать в память и даже передавать в потоковом режиме. Это важно для использования сборок .NET в качестве хранимых процедур. Это отличается от смешанных сборок, которые из-за зависимости от механизмов загрузки Windows должны существовать на диске для выполнения.
Отражение: Невозможно отразить поверх смешанных исполняемых файлов, в то время как чистые сборки обеспечивают полную поддержку отражения. Для получения дополнительной информации см. Reflection (C ++ / CLI).
Управляемость хоста: поскольку чистые сборки содержат только MSIL, они ведут себя более предсказуемо и гибко, чем смешанные сборки, когда используются в приложениях, в которых размещается CLR, и изменяют поведение по умолчанию.
Ограничения / clr: pure
В этом разделе описаны функции, которые в настоящее время не поддерживаются /clr:pure.
.
Чистые сборки не могут быть вызваны неуправляемыми функциями. Поэтому чистые сборки не могут реализовывать интерфейсы COM или предоставлять собственные обратные вызовы. Чистые сборки не могут экспортировать функции через файлы __declspec (dllexport) или .DEF. Кроме того, функции, объявленные с соглашением __clrcall, не могут быть импортированы через __declspec (dllimport). Функции в собственном модуле можно вызывать из чистой сборки, но чистые сборки не могут предоставлять функции, которые можно вызывать самостоятельно, поэтому раскрытие функциональности в чистой сборке должно выполняться через управляемые функции в смешанной сборке. Дополнительные сведения см. В разделе Как выполнить миграцию в / clr: pure (C ++ / CLI).
библиотеки ATL и MFC не поддерживаются компиляцией в чистом режиме в Visual C ++.
Чистые .net-модули не принимаются в качестве входных данных для компоновщика Visual C ++. Однако чистые файлы .obj принимаются компоновщиком, а файлы .obj содержат расширенный набор информации, содержащейся в сетевых модулях. Для получения дополнительной информации см. Файлы .netmodule как входные данные компоновщика.
Поддержка COM компилятора (#import) не поддерживается, так как это приведет к неуправляемым инструкциям в чистой сборке.
Параметры с плавающей точкой для выравнивания и обработки исключений не регулируются для чистых сборок. В результате, __declspec (align) не может быть использован. Это делает некоторые заголовочные файлы, такие как fpieee.h, несовместимыми с /clr:pure.
Функция GetLastError в PSDK может давать неопределенное поведение при компиляции с /clr:pure.