4

アプリケーションのコンパイル中に未使用のDLL参照(フレームワークdll)がプロジェクトに追加された場合、どのような影響がありますか?

たとえば、アセンブリのサイズが大きくなりますか?実行時にそれらのDLLをロードしますか?等

この質問は最適化に関するものではありません。これは、.NETインフラストラクチャをよりよく理解するためです。

4

2 に答える 2

5

いいえ、C#コンパイラは、コードで実際に使用される型を含むアセンブリの最終アセンブリにのみアセンブリ参照を配置します。未使用のアセンブリを追加することの唯一の影響は、コンパイル自体のごくわずかな速度低下です。

これは、ildasm.exeを使用して自分で確認できます。.assembly最終アセンブリで実行し、マニフェストをダブルクリックして、ディレクティブを探します。

これは実行時にも大幅に最適化されており、アセンブリはジャストインタイムコンパイラによってロードされます。これは、そのアセンブリ内のタイプのメソッドを実際に呼び出す場合にのみ行われます。

于 2012-06-22T05:57:04.507 に答える
1

MSDNのQ&Aによると、これを参照するとアセンブリサイズ大きくなりますが、usingステートメントはコンパイル時に評価されます(以下を参照)。


実行時に、JIT「コンパイラ」がディスパッチされてDLLをフックします。ファイルサイズが約1KB増加する理由は、参照情報の保存に約1KBが必要なためです。各DLLをフックするため、起動時間が遅くなりますが、実行時間は影響を受けません。起動時間の差は非常に小さいので、CodingHorrorに関するこの記事を参照することをお勧めします。これが組み込みシステムに展開されない限り、私はこれについて心配することはありません。アプリケーションを閉じると、JIT「コンパイラ」はDLLをアンロードし、必要なリソースを解放します。
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)
    { }
}
于 2012-06-22T02:28:23.323 に答える