1

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

4

1 回答 1

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);
    }
}
于 2013-06-03T06:53:42.697 回答