4

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

比如,它会增加装配尺寸吗?它会在运行时加载那些 DLL 吗?ETC

这个问题与优化无关。这是为了更好地理解 .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 回答