アプリケーションのコンパイル中に未使用のDLL参照(フレームワークdll)がプロジェクトに追加された場合、どのような影響がありますか?
たとえば、アセンブリのサイズが大きくなりますか?実行時にそれらのDLLをロードしますか?等
この質問は最適化に関するものではありません。これは、.NETインフラストラクチャをよりよく理解するためです。
いいえ、C#コンパイラは、コードで実際に使用される型を含むアセンブリの最終アセンブリにのみアセンブリ参照を配置します。未使用のアセンブリを追加することの唯一の影響は、コンパイル自体のごくわずかな速度低下です。
これは、ildasm.exeを使用して自分で確認できます。.assembly
最終アセンブリで実行し、マニフェストをダブルクリックして、ディレクティブを探します。
これは実行時にも大幅に最適化されており、アセンブリはジャストインタイムコンパイラによってロードされます。これは、そのアセンブリ内のタイプのメソッドを実際に呼び出す場合にのみ行われます。
MSDNのQ&Aによると、これを参照するとアセンブリサイズが大きくなりますが、using
ステートメントはコンパイル時に評価されます(以下を参照)。
using
ステートメント
について。コンパイル時に、次のようになります。
public class MyClass
{
public static void DoNothing(int nil)
{ }
}
次のように翻訳されます:
using System;
public class MyClass
{
public static void DoNothing(Int32 nil)
{ }
}
これはさらに次のように翻訳されます。
public class MyClass
{
public static void DoNothing(System.Int32 nil)
{ }
}