web-dev-qa-db-ja.com

未使用のコードは起動後のアセンブリに影響しますか(メモリなど)?

免責事項:私はPHPの出身です。

PHPには、autoloader機能が原因で、不要な場合はロードされない何千ものファイルが含まれる可能性があります(コードが必要な場合はロードされます)

.NETのアセンブリはどのように機能しますか?アプリケーションの起動時にすべてのプログラムコードをメモリに読み込みますか?

たとえば、複数のコントローラーを持ついくつかの領域を持つことができます:

  • エリア1
    • コントローラー1
  • エリア2
    • コントローラー1
    • ...
    • コントローラー42

Area 2は構成によってオプションですが、この領域を別のアセンブリに抽出し、必要に応じてそれをロードすることをお勧めしますか?

6

アプリケーションの起動時にすべてのプログラムコードをメモリにロードしますか?

[〜#〜]いいえ[〜#〜]

プロジェクトには、必要なだけAssembliesを含めることができます。 Assembliesは、usingキーワードを介して参照されます。未使用のアセンブリは、ビルド時にフィルタリングされます。たとえば、次の2つの参照アセンブリを使用できます。

using System.Windows.Forms;
using System.Web.UI.WebControls;

使用していない場合AssemblySystem.Windows.Forms、コードのパフォーマンスには影響しませんが、コンパイル時間とIntellisenseのパフォーマンスに影響を与える可能性があります。

未使用の使用については このStackOverflowの質問 を参照してください。

参照されたアセンブリはすぐには読み込まれません-必要に応じてオンザフライで読み込まれます。したがって、最上位プロジェクトにアセンブリ参照があるかどうか、またはアセンブリの依存Assemblyがあるかどうかに関係なく、assembliesは通常ロードされますユーザーコードによって明示的にロードされない限り、必要に応じて。依存アセンブリについても同様です。詳細については、 。NETアセンブリの依存関係が読み込まれるタイミング を参照してください。


[編集]

アセンブリ内のクラスは、使用時にのみ読み込まれます。すべてのクラスがメモリに一度に読み込まれるわけではありません。静的クラスでさえ、最初に参照されたときにメインメモリに読み込まれます。そのため、アセンブリに未使用のクラスが大量に含まれていても、パフォーマンスは低下しませんが、必要なハードディスク領域が増加します(メモリ要件ではありません)。

したがって、簡単な答えは[〜#〜] no [〜#〜]です。

5
ihimv