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

StackOverflow https://stackoverflow.com/questions/800867

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

  • Вызываемая оболочка среды выполнения (RCW) — вызов COM-объекта из .NET.
  • COM Callable Wrapper (CCW) — делает объект .NET видимым как COM-объект.
  • П/вызов

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top