170

私はC#コードで特定のコマンドを使用していますが、これはうまく機能します。ただし、「管理されていない」コードでは誤動作すると言われています。

管理されたコードまたは管理されていないコードとは何ですか?

4

13 に答える 13

220

これは主題についての良い記事です。

要約する、

  1. マネージコードはマシンコードにコンパイルされるのではなく、マシン上のサービスによって解釈および実行される中間言語にコンパイルされるため、メモリやスレッドなどの危険なものを処理する(願わくば!)安全なフレームワーク内で動作します。最近の使用法では、これはしばしば.NETを意味しますが、そうである必要はありません。

同じマシンにインストールされているランタイムエンジン内で実行されるアプリケーションプログラム。アプリケーションはそれなしでは実行できません。ランタイム環境は、プログラムが使用するソフトウェアルーチンの一般的なライブラリを提供し、通常はメモリ管理を実行します。また、ソースコードから実行可能コードへ、または中間言語から実行可能コードへのジャストインタイム(JIT)変換を提供する場合もあります。Java、Visual Basic、および.NETの共通言語ランタイム(CLR)は、ランタイムエンジンの例です。(続きを読む

  1. アンマネージコードはマシンコードにコンパイルされるため、OSによって直接実行されます。したがって、マネージコードにはない有害で強力なことを実行する機能があります。これはすべてが以前は機能していた方法であるため、通常は.dllなどの古いものに関連付けられています。

単独で実行される実行可能プログラム。このプログラムは、オペレーティングシステムから起動され、オペレーティングシステムのソフトウェアルーチンを呼び出して使用しますが、別のソフトウェアシステムを使用する必要はありません。機械語にアセンブルされたアセンブリ言語プログラムや、特定のプラットフォーム用に機械語にコンパイルされたC / C ++プログラムは、アンマネージコードの例です。(続きを読む

  1. ネイティブコードは多くの場合、Unmanagedと同義ですが、同一ではありません。
于 2008-12-02T15:39:10.250 に答える
79

これは、アンマネージコードに関するMSDNからのテキストです。

一部のライブラリコードは、アンマネージコード(たとえば、Win32などのネイティブコードAPI)を呼び出す必要があります。これは、マネージコードのセキュリティ境界の外に出ることを意味するため、十分な注意が必要です。

マネージコードに関するその他の補足的な説明は次のとおりです。

  • CLRによって実行されるコード。
  • .NET Frameworkの基盤である共通言語ランタイムを対象とするコードは、マネージコードと呼ばれます。
  • マネージコードは、CLRがメモリ管理、言語間統合、コードアクセスセキュリティ、オブジェクトの自動有効期間制御などのサービスを提供するために必要なメタデータを提供します。ILに基づくすべてのコードは、マネージコードとして実行されます。
  • CLI実行環境で実行されるコード。

あなたの問題のために:

これは、NUnitがUnitTestingのコードを実行し、その一部が管理されていない可能性があるためだと思います。しかし、私はそれについてよくわかりませんので、これを金と見なさないでください。誰かがあなたにそれについてもっと多くの情報を与えることができると確信しています。それが役に立てば幸い!

于 2008-12-02T15:32:34.290 に答える
68

unmanagedについて考えるときは、マシン固有のマシンレベルのコードを考えてください。x86 アセンブリ言語のように。アンマネージ (ネイティブ) コードはコンパイルおよびリンクされ、設計されたプロセッサ上で直接実行されます。ポータブルではありませんが、高速です。非常に単純で、必要最小限のコードです。

マネージコードは、Java から古い Interpretive BASIC まで、または .NET で実行されるあらゆるものです。マネージ コードは通常、中間レベルの P コードまたはバイト コード セットの命令にコンパイルされます。これらはアセンブリ言語に似ていますが、マシン固有の命令ではありません。マネージド コードは、プログラムが実行されているマシンからプログラムを隔離し、すべてのメモリが間接的に割り当てられる安全な境界を作成します。一般的に言えば、ポート、メモリ アドレス空間、スタックなどのマシン リソースに直接アクセスすることはできません。 . アイデアは、より安全な環境で実行することです。

たとえば、管理された変数から管理されていない変数に変換するには、実際のオブジェクト自体に到達する必要があります。おそらく、何らかの追加のパッケージで包装または箱詰めされています。管理されていない変数 (「int」など) - 32 ビット マシンでは、正確に 4 バイトを使用します。オーバーヘッドや追加のパッケージングは​​ありません。マネージ コードからアンマネージ コードに移動し、またそのコードに戻るプロセスは、"マーシャリング" と呼ばれます。これにより、プログラムが境界を越えることができます。

于 2011-09-04T06:57:34.467 に答える
25

できるだけ短い言葉で:

  • マネージド コード = .NET プログラム
  • アンマネージ コード = 「通常の」プログラム
于 2008-12-02T15:42:11.743 に答える
4

基本的にアンマネージコードは、.NET CLR(VB.NET、C#などではない)で実行されないコードです。私の推測では、NUnitには.NETコード(別名C ++)ではないランナー/ラッパーがあります。

于 2008-12-02T15:36:52.610 に答える
3

NUnit は単体テストを別の AppDomain に読み込みます。エントリ ポイントが呼び出されていない (おそらく必要ない) と想定しているため、エントリ アセンブリは null です。

于 2008-12-02T15:40:26.487 に答える
2
  • マネージドコード: C#、VB.NET などの .NET 言語で記述されたコード。
  • アンマネージコード: .NET 言語で記述されていないコードであり、MSIL はそれが何であるかを理解せず、CLR では実行できません。.NET 言語で作成されていない .NET アプリケーションで使用したサードパーティ コントロールのようなものです。
于 2013-12-19T02:01:10.300 に答える
2

マネージ コードは、CLR の環境内、つまり .NET ランタイム内で実行されます。つまり、すべての IL はマネージ コードです。しかし、サード パーティ ソフトウェアのサンプル VB6 または VC++ コンポーネントを使用している場合、.NET ランタイム (CLR) には制御がないため、それらはアンマネージ コードです。言語のソースコード実行について。

于 2010-10-09T06:09:37.557 に答える
0

Pro C# 5 および .NET 4.5 Framework から:

マネージ コードとアンマネージ コード: おそらく、C# 言語について理解する上で最も重要な点は、.NET ランタイム内でのみ実行できるコードを生成できることです (C# を使用してネイティブ COM サーバーまたはアンマネージ C/C++ を構築することはできません)。応用)。正式には、.NET ランタイムを対象とするコードを表すために使用される用語はマネージド コードです。マネージ コードを含むバイナリ ユニットは、アセンブリと呼ばれます (アセンブリの詳細については、後ほど説明します)。逆に、.NET ランタイムで直接ホストできないコードは、アンマネージ コードと呼ばれます。

于 2016-04-11T09:36:33.697 に答える
0

まずはこれを理解して、以前.NET frameworkMicrosoftスタンドアロンの製品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、管理されていないコードは、マシンに固有のものであり、すぐに使用できるものであり、さらに処理する必要はありません。

于 2015-08-24T06:08:01.057 に答える