Framework .NET。只有很多Dll和一个Exe之间的区别

时间:2013-06-03 06:47:24

标签: c# .net vb.net dll .net-assembly

我正在构建一个WinForms应用程序。我想知道一个只有.exe文件或多个Dll之间是否有区别。实际上我有一个.exe的7Mb,我担心一些性能问题;但我已经阅读了Framework在启动时加载所有需要的Dll,因此程序集碎片是无用的。对吗?

1 个答案:

答案 0 :(得分:6)

  

但我已阅读框架在启动时加载所有需要的Dll

它加载,因为它发现它需要它们;这往往意味着很多在启动时已经结束,但没有魔法“找到我将需要的所有内容并立即加载它”步骤。特别是,当JIT在当前未加载的dll中找到类型引用时,通常会加载程序集。

但请注意,在许多方面,单个大型装配不成问题 - JIT是每种类型;加载时,它不会查看装配中的每个类型。同时,虽然如果你有太多的 dll,那么装配解析/验证/融合会变得明显,但这对于非常大的数字来说只会很重要;少数或十几个并不重要(事实上,.NET框架本身被分成许多单独的dll)。

在大多数情况下,任何启动性能主要与启动时代码执行的事情有关 - 外部配置的任何处理等.1个程序集与5个(或其他)的选择很少发生成为一个关键因素。

有关信息,快速winform测试显示任何winforms使用将涉及至少 6个dll - 最有可能更多(当您添加功能等时):

{your application}
mscorlib
System.Windows.Forms
System
System.Drawing
Accessibility

通过:

using System;
using System.Windows.Forms;
public class Program {
    static void Main() {
        Application.EnableVisualStyles();
        using (var form = new Form()) {
            Application.Run(form);
        }
        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            Console.WriteLine(assembly.GetName().Name);
    }
}
相关问题