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