ホストの概要
更新 : 2007 年 11 月
.NET Framework Version 2.0 を使用すると、共通言語ランタイム (CLR: Common Language Runtime) をホストするアプリケーションで、ランタイムの多くの機能を制御できます。メモリの割り当て、アセンブリの読み込みなどの一部の機能は、カスタムの実装に置き換えることができます。他の機能の動作の制御、ランタイムのイベントの通知の受け取り、およびアプリケーション ドメインの管理ができます。
ホストされたランタイムの初期化および起動
以前のバージョンのランタイムと同様に、ランタイムは CorBindToRuntimeEx 関数によって初期化されます。読み込むランタイムを選択できますが、各プロセスでホストできるランタイムは 1 バージョンのみです。Version 2.0 が読み込まれると、関数から ICLRRuntimeHost インターフェイスが返されます。このインターフェイスを使用して、ランタイムが起動され、マネージ コードが実行されます。
メモ : |
---|
以前のバージョンでは、ICorRuntimeHost インターフェイスが返されます。 |
ランタイムの起動については「プロセスへの共通言語ランタイムの読み込み」を、マネージ コードの実行については「マネージ ホスト コードへの遷移」を参照してください。
ホスト管理インターフェイス
.NET Framework Version 2.0 の CLR には、ホストされるランタイムの多くの機能を制御するホスト管理インターフェイスが用意されています。また、ランタイムが提供する他の管理インターフェイスをホスト アプリケーションで実装したり、ユーザーが独自のホスト管理インターフェイスを実装したりできます。
検出という視点から、管理インターフェイスは次の 2 つに大きく分けられます。
ホストが実装し、ランタイムが IHostControl インターフェイスを使用して検出する管理インターフェイス
CLR で用意され、ホストが ICLRControl インターフェイスを使用して検出する管理インターフェイス
次の表は、用意されている機能別にインターフェイスをまとめたものです。各グループで最も重要なインターフェイスが最初に記載されています。
グループ |
機能 |
インターフェイス |
---|---|---|
アセンブリ読み込み管理 |
アセンブリの読み込み元の場所、バージョン管理の方法、およびアセンブリの読み込み元の形式を、ホストがカスタマイズできるようにします。たとえば、ハード ディスク上のファイルの代わりに、データベースからアセンブリを読み込むようにできます。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
ポリシー管理 |
さまざまな信頼性要件をサポートするために、プログラム エラーの処理方法をホストが指定できるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャにアクセスし、IHostPolicyManager コールバックを実装してランタイムからのエラーを通知します。 |
|
ホスト保護管理 |
指定した型またはメンバの使用を防止することにより、独自のプログラミング モデルをホストが適用できるようにします。たとえば、ホストで、スレッド処理または同期プリミティブの使用を許可しないようにできます。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャにアクセスします。 |
|
メモリ管理 |
CLR がメモリの割り当てに使用するオペレーティング システム関数を置き換えることにより、ホストがメモリの割り当てを制御できるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
ガベージ コレクション管理 |
ガベージ コレクションの開始および終了の通知を受け取るメソッドをホストが実装できるようにします。コレクションの初期化、統計情報の収集、およびコレクションの一部の特性の指定をホストで行うことができるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャにアクセスします。CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
デバッグ管理 |
追加のデバッグ情報を提供し、デバッグ タスクをカスタマイズするために、デバッガがアタッチされているかどうかをホストが検出できるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャにアクセスします。 |
|
CLR イベント管理 |
EClrEvent によって列挙されたイベントの通知をホストが登録できるようにします。 ホストは、ICLRControl インターフェイスを使用してランタイム マネージャにアクセスし、IActionOnCLREvent インターフェイスを使用してそのイベント ハンドラを実装します。 |
|
タスク管理 |
スレッドがマネージ コードとアンマネージ コードとの間で遷移したときに、ホストが通知を受けられるようにします。タスクが起動および停止されるときのスレッドの関係の制御、およびタスクのスケジュール設定をホストが行うことができるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
スレッド プール管理 |
ランタイムが使用する独自のスレッド プールをホストが実装できるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
同期管理 |
ランタイムが使用する独自の同期プリミティブをホストが実装できるようにします。イベント、クリティカル セクション、およびセマフォをホストが提供できます。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
|
I/O 完了管理 |
独自の非同期 I/O をホストが実装できるようにします。 CLR は IHostControl インターフェイスを使用して、ホストがこのインターフェイスのグループを実装しているかどうかを検出します。 |
メモ : |
---|
以前のバージョンのランタイムのホスト インターフェイスについては、「.NET Framework 1.0 および 1.1 のホスト インターフェイス」を参照してください。 |
アプリケーション ドメイン マネージャ
CLR をホストするプログラムについては、アプリケーション ドメインがアセンブリを互いに分離することによって、信頼性を高めています。アプリケーション ドメインをアンロードすることにより、アセンブリをプロセスからアンロードできます。
複数のアプリケーション ドメインを管理するため、.NET Framework Version 2.0 には、AppDomainManager クラスが基本クラスとして用意されていて、このクラスから独自のアプリケーション ドメイン マネージャを派生させることができます。ホスト アプリケーション用に設計するアプリケーション ドメイン マネージャは、基本的にマネージ コード内のホストの拡張機能です。これは、プロセス内で作成される各アプリケーション ドメイン内に自動的に読み込まれます。
アプリケーション ドメイン マネージャにより、マネージ コードとアンマネージ コードとの間の遷移を削減することで、パフォーマンスを改善できます。新しいアプリケーション ドメインが作成された時点でアプリケーション ドメイン マネージャは通知を受け取ることができるため、開発者はそれらのドメインを構成できます。アンマネージ ホストからマネージ コードを呼び出す方法も用意されています。