Заблокирован
|
|
1 | |
Обращение управляемого кода к неуправляемому23.01.2017, 11:36. Показов 1033. Ответов 3
Метки нет Все метки)
(
1)Вопрос такой как идет обращение неупрвляемого кода к управляемому?Сборщик мусора может чистить код который преобразован из il-кода jit-компилятором в машинный код.Для работы с неуправляемым кодом используются что-то (как я понял) типо враперов которые обращаются к коду на написанному на другом языке,что запускает свою версию (если можно так выразититься) "clr" для другого языка.Я правильно понимаю?
2) Возьмём неуправляемы ресурс-подключения к базе данных.Если я правильно понимаю он неуправляемы -так как само подключения написано на другом языке?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
23.01.2017, 11:36 | |
Ответы с готовыми решениями:
3
Безопасность управляемого кода .NET C++ Связь управляемого кода с обычным |
Администратор
![]() |
|
23.01.2017, 13:08 | 2 |
![]() Решение
ts-alan, когда код исполняется, то никакой разницы между управляемым и неуправляемым _кодом_ уже нет т.к. JIT-компилятор уже преобразовал IL код в машинный. То есть сам вызов кода это обычный jmp или call. Главная трудность заключается в передаче данных в обе стороны. Например, если управляемый метод хочет передать массив байтов в неуправляемый метод, то казалось бы нам достаточно передать указатель на массив и всё. На деле ситуация сложнее. Т.к. массив это ссылочный тип, то он хранится в куче и значит пока неуправляемый метод не закончил работу нужно а) не разрешать сборщику мусора удалять его и б) не разрешать сборщику мусора двигать его (в рамках дефрагментации кучи). Если мы передаем более сложные данные, то кроме этих действий могут выполнятся и другие которые обозначаются общим термином маршаллинг данных.
Нет. Сборщик мусора занимается только данными в управляемой куче. Что-то ты путаешь. CLR одна, никакой особой версии для разных языков, тем более неуправляемых, нет. Есть такое понятие как Runtime Callable Wrapper, но это относится только к взаимодействию с COM объектами. Язык здесь ни при чем. Подключение к БД является неуправляемым ресурсом потому что за него отвечает (читай владеет или управляет) неуправляемый код.
1
|
Администратор
![]() |
|
23.01.2017, 14:28 | 4 |
Это не вопрос возможности, а разделения ответственности. CLR отвечает за управляемый код и данные. Всё остальное ее не касается. То есть она просто не занимается неуправляемым кодом, если все еще непонятно.
Работа с БД означает работу с файлом на диске и/или с сетью. В .NET нет механизмов для низкуровневой работы с устройствами ввода/вывода. Поэтому нам приходится прибегать к помощи посредников написанных на неуправляемых языках. Под этим в первую очередь понимается ОС, но это может быть и другой код. В этом нет ничего страшного т.к. .NET изначально проектировалась как надстройка над неуправляемым кодом.
0
|
23.01.2017, 14:28 | |
Помогаю со студенческими работами здесь
4
Не могу вытащить string из управляемого кода
Как передать параметры неуправляемому коду Обращение к документу из кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |