回答:
これは、アンマネージコードに関するMSDNからのテキストです。
一部のライブラリコードは、アンマネージコードを呼び出す必要があります(たとえば、Win32などのネイティブコードAPI)。これは、マネージコードのセキュリティ境界の外に出ることを意味するため、十分な注意が必要です。
マネージコードに関するその他の補足説明は次のとおりです。
あなたの問題について:
それは、NUnitがUnitTestingのコードを実行し、その一部が管理されていない可能性があるためだと思います。しかし、私はそれについて確信が持てないので、これを金と考えないでください。誰かがあなたにそれについてもっと多くの情報を与えることができると確信しています。それが役に立てば幸い!
これは主題についてのよい記事です。
要約する、
同じマシンにインストールされているランタイムエンジン内で実行されるアプリケーションプログラム。これなしではアプリケーションを実行できません。ランタイム環境は、プログラムが使用し、通常はメモリ管理を実行するソフトウェアルーチンの一般的なライブラリを提供します。また、ソースコードから実行可能コードへの、または中間言語から実行可能コードへのジャストインタイム(JIT)変換も提供します。Java、Visual Basic、.NETの共通言語ランタイム(CLR)は、ランタイムエンジンの例です。(続きを読む)
単独で実行される実行可能プログラム。オペレーティングシステムから起動されたプログラムは、オペレーティングシステムのソフトウェアルーチンを呼び出して使用しますが、別のソフトウェアシステムを使用する必要はありません。機械語にアセンブルされたアセンブリ言語プログラム、および特定のプラットフォーム用に機械語にコンパイルされたC / C ++プログラムは、アンマネージコードの例です。(続きを読む)
アンマネージと考えるときは、マシン固有のマシンレベルのコードを考えてください。x86アセンブリ言語と同様。アンマネージ(ネイティブ)コードは、コンパイルされてリンクされ、設計されたプロセッサー上で直接実行されますが、現時点ではすべてのOSは除きます。ポータブルではありませんが、高速です。非常にシンプルなコードを削除。
マネージコードは、Javaから古いInterpretive BASICまで、または.NETで実行されるすべてのものです。マネージコードは通常、中間レベルのPコードまたはバイトコードの命令セットにコンパイルされます。これらはアセンブリ言語に似ていますが、マシン固有の命令ではありません。マネージコードは、プログラムを実行しているマシンからプログラムを隔離し、すべてのメモリが間接的に割り当てられる安全な境界を作成します。一般的に、ポート、メモリアドレススペース、スタックなどのマシンリソースに直接アクセスすることはできません。 。アイデアは、より安全な環境で実行することです。
たとえば、マネージ変数からアンマネージ変数に変換するには、実際のオブジェクト自体にアクセスする必要があります。それはおそらくいくつかの追加のパッケージに包まれているか箱に入っています。UNmanaged変数(「int」など)は、32ビットマシンでは、正確に4バイトを使用します。オーバーヘッドや追加のパッケージはありません。マネージコードからアンマネージコードに移行するプロセスは、「マーシャリング」と呼ばれます。これにより、プログラムが境界を越えることができます。
できるだけ少ない言葉で:
マネージコード:
共通言語ランタイムとの「協力契約」の下で実行されるコード。マネージコードは、メモリ管理、言語間の統合、コードアクセスセキュリティ、オブジェクトの自動ライフタイムコントロールなどのサービスを提供するためにランタイムが必要とするメタデータを提供する必要があります。Microsoft中間言語(MSIL)に基づくすべてのコードは、マネージコードとして実行されます。アンマネージコード:
共通言語ランタイムの規則や要件に関係なく作成されるコード。アンマネージコードは、最小限のサービス(たとえば、ガベージコレクションなし、制限されたデバッグなど)で共通言語ランタイム環境で実行されます。
リファレンス:http : //www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
マネージコード:-MSIL(中間言語)形式のコードは、言語コンパイラのコンパイル後に開発され、CLR
呼び出されたマネージコードによって直接実行されます。例:-.netフレームワークでサポートされるすべての61言語コード
アンマネージコード:-以前.net
に開発され、MSILフォームが利用できず、CLR
直接実行されるCLR
コードはオペレーティングシステムにリダイレクトされ、これはアンマネージコードと呼ばれます。
例:-COM、Win32 API
まず、これは、以前.NET framework
はMicrosoft
スタンドアロンの製品MFC (Visual C++), VB, FoxPro
などを提供していたことを理解しています。
2002年、マイクロソフトは自社の製品を組み合わせて.NETフレームワークを作成しました。これで、コードが以前に実行された方法と、コードが.NET Frameworkで管理および実行される方法には違いがあります。MicrosoftはCLR
、.NETフレームワークのサポートされている言語からのコードをコンパイルし、memory mangement, garbage collection
などの追加機能を提供するwith .NETフレームワークの概念を導入しました。しかし、そのようなCLR機能は以前は直接利用できませんでした。
したがって、(CLRでコンパイルされた).NETフレームワークでライブラリ/コードを作成している場合は、と呼ばれ
Managed code
ます。このライブラリを他の.NETアプリケーション/プロジェクトでさらに使用できます。また、CLRは以前にどのようにコンパイルされたかを理解します。そのため、管理コードのままです。
OTOH .NETフレームワークより前に作成されたライブラリを使用する場合は、特定の制限を使用できますが、CLRはその時点では存在していなかったため、CLRはこのコードを理解してコンパイルしないので注意してください。 。そして、これは呼ばれunmanaged code
ます。CLR互換でない場合、特定の機能/ツールを提供するためにサードパーティによって作成されたライブラリ/アセンブリもアンマネージコードと見なされる場合があることに注意してください。
簡単に言えば、Manageコードは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ランタイムで直接ホストできないコードは、アンマネージコードと呼ばれます。