项目参考中未使用的程序集的影响

时间:2012-06-22 02:25:32

标签: .net clr

如果应用程序在编译期间将未使用的DLL引用(框架dll)添加到项目中,会产生什么影响?

喜欢,它会增加装配尺寸吗?它会在运行时加载这些DLL吗?等

这个问题与优化无关。这是为了更好地理解.NET基础结构。

2 个答案:

答案 0 :(得分:5)

不,C#编译器仅将程序集引用放在最终程序集中,以用于包含代码中实际使用的类型的程序集。添加未使用的程序集的唯一影响是编译本身的速度非常轻微。

您可以使用ildasm.exe自行查看。在最终程序集上运行它,双击清单并查找.assembly指令。

这在运行时也经过了大量优化,程序集由即时编译器加载。只有在实际调用该程序集中的类型方法时才会这样做。

答案 1 :(得分:1)

根据MSDN Q& A,引用它增加您的程序集大小,但是,using语句在编译时进行评估(见下文)。

<小时/> 在运行时,将调度JIT“编译器”以挂钩DLL。文件大小增加约1KB背后的原因是因为存储参考信息需要大约1KB。它减慢启动时间,因为它挂钩每个DLL,但运行时不会受到影响。启动时间差异很小,我建议看看this article on 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)
    { }
}