私はC#コードで特定のコマンドを使用していますが、これはうまく機能します。ただし、「管理されていない」コードでは誤動作すると言われています。
管理されたコードまたは管理されていないコードとは何ですか?
私はC#コードで特定のコマンドを使用していますが、これはうまく機能します。ただし、「管理されていない」コードでは誤動作すると言われています。
管理されたコードまたは管理されていないコードとは何ですか?
これは主題についての良い記事です。
要約する、
同じマシンにインストールされているランタイムエンジン内で実行されるアプリケーションプログラム。アプリケーションはそれなしでは実行できません。ランタイム環境は、プログラムが使用するソフトウェアルーチンの一般的なライブラリを提供し、通常はメモリ管理を実行します。また、ソースコードから実行可能コードへ、または中間言語から実行可能コードへのジャストインタイム(JIT)変換を提供する場合もあります。Java、Visual Basic、および.NETの共通言語ランタイム(CLR)は、ランタイムエンジンの例です。(続きを読む)
単独で実行される実行可能プログラム。このプログラムは、オペレーティングシステムから起動され、オペレーティングシステムのソフトウェアルーチンを呼び出して使用しますが、別のソフトウェアシステムを使用する必要はありません。機械語にアセンブルされたアセンブリ言語プログラムや、特定のプラットフォーム用に機械語にコンパイルされたC / C ++プログラムは、アンマネージコードの例です。(続きを読む)
これは、アンマネージコードに関するMSDNからのテキストです。
一部のライブラリコードは、アンマネージコード(たとえば、Win32などのネイティブコードAPI)を呼び出す必要があります。これは、マネージコードのセキュリティ境界の外に出ることを意味するため、十分な注意が必要です。
マネージコードに関するその他の補足的な説明は次のとおりです。
あなたの問題のために:
これは、NUnitがUnitTestingのコードを実行し、その一部が管理されていない可能性があるためだと思います。しかし、私はそれについてよくわかりませんので、これを金と見なさないでください。誰かがあなたにそれについてもっと多くの情報を与えることができると確信しています。それが役に立てば幸い!
unmanagedについて考えるときは、マシン固有のマシンレベルのコードを考えてください。x86 アセンブリ言語のように。アンマネージ (ネイティブ) コードはコンパイルおよびリンクされ、設計されたプロセッサ上で直接実行されます。ポータブルではありませんが、高速です。非常に単純で、必要最小限のコードです。
マネージコードは、Java から古い Interpretive BASIC まで、または .NET で実行されるあらゆるものです。マネージ コードは通常、中間レベルの P コードまたはバイト コード セットの命令にコンパイルされます。これらはアセンブリ言語に似ていますが、マシン固有の命令ではありません。マネージド コードは、プログラムが実行されているマシンからプログラムを隔離し、すべてのメモリが間接的に割り当てられる安全な境界を作成します。一般的に言えば、ポート、メモリ アドレス空間、スタックなどのマシン リソースに直接アクセスすることはできません。 . アイデアは、より安全な環境で実行することです。
たとえば、管理された変数から管理されていない変数に変換するには、実際のオブジェクト自体に到達する必要があります。おそらく、何らかの追加のパッケージで包装または箱詰めされています。管理されていない変数 (「int」など) - 32 ビット マシンでは、正確に 4 バイトを使用します。オーバーヘッドや追加のパッケージングはありません。マネージ コードからアンマネージ コードに移動し、またそのコードに戻るプロセスは、"マーシャリング" と呼ばれます。これにより、プログラムが境界を越えることができます。
できるだけ短い言葉で:
基本的にアンマネージコードは、.NET CLR(VB.NET、C#などではない)で実行されないコードです。私の推測では、NUnitには.NETコード(別名C ++)ではないランナー/ラッパーがあります。
NUnit は単体テストを別の AppDomain に読み込みます。エントリ ポイントが呼び出されていない (おそらく必要ない) と想定しているため、エントリ アセンブリは null です。
マネージ コードは、CLR の環境内、つまり .NET ランタイム内で実行されます。つまり、すべての IL はマネージ コードです。しかし、サード パーティ ソフトウェアのサンプル VB6 または VC++ コンポーネントを使用している場合、.NET ランタイム (CLR) には制御がないため、それらはアンマネージ コードです。言語のソースコード実行について。
Pro C# 5 および .NET 4.5 Framework から:
マネージ コードとアンマネージ コード: おそらく、C# 言語について理解する上で最も重要な点は、.NET ランタイム内でのみ実行できるコードを生成できることです (C# を使用してネイティブ COM サーバーまたはアンマネージ C/C++ を構築することはできません)。応用)。正式には、.NET ランタイムを対象とするコードを表すために使用される用語はマネージド コードです。マネージ コードを含むバイナリ ユニットは、アセンブリと呼ばれます (アセンブリの詳細については、後ほど説明します)。逆に、.NET ランタイムで直接ホストできないコードは、アンマネージ コードと呼ばれます。
まずはこれを理解して、以前.NET framework
はMicrosoft
スタンドアロンの製品MFC (Visual C++), VB, FoxPro
などを提供していました。
2002 年、マイクロソフトは自社製品を組み合わせて .NET フレームワークを作成しました。以前のコードの実行方法と、.NET フレームワークでのコードの管理および実行方法には違いがあります。Microsoft は、.NET フレームワークのCLR
サポートされている言語からのコードをコンパイルし、memory mangement, garbage collection
などの追加機能を提供する .NET フレームワークの概念を導入しました。ただし、そのような CLR 機能は、以前は利用できませんでした。
したがって、.NET フレームワーク (CLR でコンパイル) でライブラリ/コードを作成している場合、それは と呼ばれ
Managed code
ます。このライブラリを他の .NET アプリケーション/プロジェクトでさらに使用することができます。そこでも、CLR はそれが以前にどのようにコンパイルされたかを理解するため、管理コードのままです。
OTOH .NET フレームワークより前に作成されたライブラリを使用する場合は、特定の制限がありますが、覚えておいてください。CLR はその時点では存在していなかったため、CLR はこのコードを理解して再度コンパイルすることはできません。 . そして、これは と呼ばれunmanaged code
ます。特定の機能/ツールを提供するためにサード パーティによって作成されたライブラリ/アセンブリも、CLR 互換でない場合、アンマネージ コードと見なされる可能性があることに注意してください。
簡単に言えば、管理コードは、CLR が理解し、さらに実行するために独自にコンパイルできるものです。.NET フレームワークでは、(.NET フレームワークで動作する任意の言語から) コードが CLR に移動すると、コードがメタ データ情報を提供するため、CLR はここで指定された機能を提供できます。それらのいくつかは、Garbage collection, Performance improvements, cross-language integration, memory management
などです。
OTOH、管理されていないコードは、マシンに固有のものであり、すぐに使用できるものであり、さらに処理する必要はありません。