Я использую определенную команду в моем коде C #, который работает хорошо. Тем не менее, говорят, что он плохо себя ведет в «неуправляемом» коде.
Что такое управляемый или неуправляемый код?
Я использую определенную команду в моем коде C #, который работает хорошо. Тем не менее, говорят, что он плохо себя ведет в «неуправляемом» коде.
Что такое управляемый или неуправляемый код?
Ответы:
Вот некоторый текст из MSDN о неуправляемом коде .
Некоторый библиотечный код должен вызывать неуправляемый код (например, API нативного кода, такие как Win32). Поскольку это означает выход за пределы периметра безопасности для управляемого кода, требуется должная осторожность.
Вот еще одно бесплатное объяснение управляемого кода:
Для вашей проблемы:
Я думаю, это потому, что NUnit выполняет ваш код для UnitTesting и может иметь некоторую его часть, которая неуправляема. Но я не уверен в этом, поэтому не принимайте это за золото. Я уверен, что кто-то сможет дать вам больше информации об этом. Надеюсь, поможет!
Это хорошая статья на эту тему.
Подвести итоги,
Прикладная программа, которая выполняется в среде выполнения, установленной на том же компьютере. Приложение не может работать без него. Среда выполнения предоставляет общую библиотеку программных подпрограмм, которая используется программой и обычно выполняет управление памятью. Он также может обеспечивать преобразование JIT в исходное время в исполняемый код или из промежуточного языка в исполняемый код. Java, Visual Basic и .NET Common Language Runtime (CLR) являются примерами модулей времени выполнения. ( Читать дальше )
Исполняемая программа, которая запускается сама по себе. Запущенная из операционной системы, программа вызывает и использует программные процедуры в операционной системе, но не требует использования другой программной системы. Программы на языке ассемблера, которые были собраны на машинном языке, и программы на C / C ++, скомпилированные на машинном языке для конкретной платформы, являются примерами неуправляемого кода. ( Читать дальше )
Когда вы думаете о неуправляемом , подумайте о машинном коде машинного уровня. Как х86 на ассемблере. Неуправляемый (нативный) код компилируется и связывается для запуска непосредственно на процессоре, для которого он был разработан, исключая все компоненты ОС на данный момент. Это не портативный, но это быстро. Очень простой, урезанный код.
Управляемый код - это все, от Java до старой интерпретирующей BASIC, или все, что работает под .NET. Управляемый код обычно компилируется в P-код промежуточного уровня или набор инструкций байтового кода. Это не машинно-ориентированные инструкции, хотя они похожи на язык ассемблера. Управляемый код изолирует программу от машины, на которой она выполняется, и создает безопасную границу, в которой вся память выделяется косвенно, и, вообще говоря, у вас нет прямого доступа к ресурсам машины, таким как порты, адресное пространство памяти, стек и т. Д. Идея состоит в том, чтобы работать в более безопасной среде.
Чтобы преобразовать управляемую переменную, скажем, в неуправляемую, вам нужно перейти к самому реальному объекту. Он, вероятно, упакован или упакован в какую-то дополнительную упаковку. Неуправляемые переменные (например, int) на 32-битной машине занимают ровно 4 байта. Там нет накладных или дополнительной упаковки. Процесс перехода от управляемого к неуправляемому коду и обратно - называется « маршалинг ». Это позволяет вашим программам пересекать границу.
Как можно меньше слов:
Управляемый код - это то, что создают компиляторы C # .Net, VB.Net, F # .Net и т. Д. Он работает на CLR, который, помимо прочего, предлагает такие услуги, как сборка мусора, проверка ссылок и многое другое. Так что подумайте, мой код управляется CLR.
С другой стороны, неуправляемый код компилируется прямо в машинный код. Это не управляет CLR.
Управляемый код:
код, который работает по «договору о сотрудничестве» с общеязыковой средой исполнения. Управляемый код должен предоставлять метаданные, необходимые для среды выполнения, чтобы предоставлять такие услуги, как управление памятью, межязыковая интеграция, безопасность доступа к коду и автоматический контроль времени жизни объектов. Весь код, основанный на промежуточном языке Microsoft (MSIL), выполняется как управляемый код.Неуправляемый код:
код, созданный без учета соглашений и требований общеязыковой среды выполнения. Неуправляемый код выполняется в общеязыковой среде выполнения с минимальным количеством служб (например, без сборки мусора, ограниченной отладки и т. Д.).
Ссылка: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
Управляемый код выполняется внутри среды CLR, т.е. среды выполнения .NET. Короче говоря, все IL являются управляемым кодом. Но если вы используете какое-либо стороннее программное обеспечение, например компонент VB6 или VC ++, они являются неуправляемым кодом, поскольку среда выполнения .NET (CLR) не имеет контроля над исполнением исходного кода языка.
Управляемый код: - код, форма MSIL (промежуточный язык) которого разрабатывается после компиляции языкового компилятора и непосредственно выполняется CLR
вызываемым управляемым кодом. Например: - Весь код на 61 языке поддерживается .net Framework
Неуправляемый код: - разработанный ранее код, .net
для которого форма MSIL недоступна и выполняется CLR
напрямую, скорее всего CLR
, перенаправит в операционную систему, которая называется неуправляемым кодом.
Например: -COM, Win32 API
Прежде всего это понять, перед тем .NET framework
, Microsoft
обеспечивали автономные продукты , как и MFC (Visual C++), VB, FoxPro
т.д.
В 2002 году Microsoft объединила свои продукты и сделала .NET Framework. Теперь есть разница между тем, как код выполнялся раньше, и тем, как код управляется и выполняется в .NET Framework. Microsoft представила концепцию CLR
.NET Framework, которая компилирует код, поступающий из любого поддерживаемого языка .NET Framework, и предоставляет дополнительные функции, подобные memory mangement, garbage collection
т. Д. Но такие функции CLR ранее не были доступны напрямую.
Так что если вы создаете библиотеку / код в .NET Framework (скомпилирован с CLR), то это называется
Managed code
. Вы можете использовать эту библиотеку в других приложениях / проектах .NET, и там CLR поймет, как она была скомпилирована ранее, и поэтому она остается вашим кодом управления.
OTOH, если вы хотите использовать библиотеки, которые были написаны до .NET Framework, вы можете сделать это с определенными ограничениями, но помните, поскольку CLR не было в то время, поэтому теперь CLR не будет понимать и компилировать этот код снова , И это будет называться unmanaged code
. Обратите внимание, что библиотеки / сборки, созданные какой-либо третьей стороной для предоставления определенных функций / инструментов, также могут рассматриваться как неуправляемый код, если он не совместим с CLR.
С точки зрения непрофессионала, Manage code - это то, что ваш CLR понимает и может скомпилировать его самостоятельно для дальнейшего выполнения. В .NET Framework (из любого языка, который работает на .NET Framework) Когда код переходит в CLR, код предоставляет некоторую метаданную, чтобы CLR мог предоставить вам функции, указанные здесь . Немногие из них и Garbage collection, Performance improvements, cross-language integration, memory management
т. Д.
OTOH, неуправляемый код является чем-то конкретным для машины и готов к использованию, нет необходимости обрабатывать его дальше.
Из Pro C # 5 и .NET 4.5 Framework:
Управляемый и неуправляемый код. Возможно, наиболее важным моментом, который необходимо понять о языке C #, является то, что он может создавать код, который может выполняться только в среде выполнения .NET (вы никогда не сможете использовать C # для создания собственного COM-сервера или неуправляемого C / C ++. применение). Официально термин, используемый для описания кода, предназначенного для среды выполнения .NET, - это управляемый код. Двоичный модуль, который содержит управляемый код, называется сборкой (подробнее о сборках чуть ниже). И наоборот, код, который не может быть непосредственно размещен в среде выполнения .NET, называется неуправляемым кодом.