Хостинг CLR по сравнению с использованием ClrCreateManagedInstance - каковы преимущества?

Я успешно реализовал взаимодействие между приложением Win32 и управляемой dll .Net, как описано здесь. Но я также прочитал здесь, что можно разместить всю среду CLR внутри неуправляемого процесса.

Итак, мой вопрос: зачем вам это делать? Это несколько сложнее, чем просто использовать объект - какие преимущества вы получите за такую ​​цену повышенной сложности?

Изменить: из двух первых ответов я понял, что у вас есть возможность настроить CLR под свои нужды - это означает, что если вы пишете простое бизнес-приложение, вам никогда не понадобится хостинг. Хостинг предназначен для тяжелых системных вещей, таких как браузер или SQL Server.


person Sergey Aldoukhov    schedule 29.04.2009    source источник


Ответы (3)


Размещение среды CLR обычно не используется для взаимодействия между управляемым кодом и Win32. Обычно существует 3 метода взаимодействия:

  • Runtime Callable Wrapper (RCW) - вызов COM-объекта из .NET
  • COM Callable Wrapper (CCW) - сделать объект .NET видимым как объект COM
  • P / Invoke

Они поддерживаются с первой версии .NET. Весь смысл размещения CLR заключается в том, чтобы позволить вам глубоко встраивать код .NET в неуправляемое приложение. Например, есть модуль, который может размещать .NET в Apache на Win32, позволяя запускать страницы .aspx.

Точно так же SQL Server хотел, чтобы люди могли писать расширенные хранимые процедуры и функции с управляемым кодом. Раньше вы могли писать их на C / C ++, но если бы они размещали CLR, они действительно могли бы позволить людям писать их на C #. Работа по приведению среды CLR в состояние, в котором ее можно было бы безопасно встроить, действительно отодвинула сроки, и так родились такие вещи, как контроль над памятью и безопасность. SQL Server предъявляет серьезные требования к стабильности, и вы не можете позволить .NET раскачивать лодку.

API хостинга значительно изменился с .NET 1.x на 2.x, но стал более стабильным, поскольку 2.0 CLR пережила .NET 3.0, 3.5 и т. Д.

person Brian Lyttle    schedule 01.05.2009

Microsoft SQL Server использует его расширенно, чтобы заменить безопасность, загрузку сборок, управление памятью, управление потоками и многое другое. Хорошая книга на эту тему - «Настройка среды CLR Microsoft .NET Framework».

person Lars Truijens    schedule 29.04.2009

У вас может быть устаревшее приложение и вы хотите разрешить третьим сторонам использовать возможности .net из вашего приложения, но особенно контролируемым образом например, контролируя, где находятся сборки загружен из. Вот пример.

person Preet Sangha    schedule 29.04.2009
comment
Хорошая ссылка, спасибо. Тем не менее, мой вопрос был больше о том, почему вам нужно больше контроля. - person Sergey Aldoukhov; 29.04.2009