存在しない問題を解決しようとしています。アセンブリのロードは、.NET で非常に大幅に最適化されています。
大きなアセンブリを多くの小さなアセンブリに分割することは、間違いなくあなたができる最悪のことです。アセンブリをロードする際の最大の費用は、ファイルを見つけることです。これはコールドスタートの問題です。CLRローダーは低速のディスクによって停止します。ファイルの内容を含むディスクセクターを見つけるには、ディレクトリエントリを取得して検索する必要があります。この問題は、アセンブリデータをファイルシステムキャッシュから取得できるウォームスタートで解消されます。Javaはこの方法でもそれを行わないことに注意してください。それは、.classファイルを.jarにパッケージ化します。.jarは、アセンブリの大まかな同等物です。
ファイルが見つかると、.NETはオペレーティングシステム機能を使用して、アセンブリデータを実際に非常に安価にロードできるようにします。メモリマップトファイルを使用します。これには、ファイル用に仮想メモリを予約するだけで、ファイルからの読み取りは含まれません。
読み取りは後で行われるまで発生せず、ページフォールトによって実行されます。デマンドページング仮想メモリオペレーティングシステムの機能。仮想メモリにアクセスするとページフォールトが発生し、オペレーティングシステムはファイルからデータをロードし、仮想メモリページをRAMにマップします。その後、プログラムは続行されますが、OSによって中断されたことに気付くことはありません。これらのページフォールトを生成するのはジッターであり、アセンブリ内のメタデータテーブルにアクセスして、メソッドのILを見つけます。次に、そこから実行可能なマシンコードを生成します。
このスキームの自動的な利点は、アセンブリ内にあるが使用されていないコードに対して料金を支払う必要がないことです。ジッタには、ILを含むファイルのセクションを調べる理由がないため、実際に読み取られることはありません。
また、このスキームの欠点に注意してください。クラスを初めて使用すると、ディスクの読み取りによるパフォーマンスヒットが発生します。これは何らかの方法で支払う必要があります。.NETでは、債務は可能な限り最後の時点で支払われる必要があります。これが、属性が遅いという評判がある理由です。
大きなアセンブリは、多くの小さなアセンブリよりも常に優れています。