.NET程序集大小会影响性能吗?

时间:2008-12-03 13:48:05

标签: .net performance assemblies

.net程序集的大小是否会影响性能? Windows窗体/ Web表单项目中的程序集数量如何?

9 个答案:

答案 0 :(得分:34)

来自微软的模式&实践Improving .NET Application Performance and Scalability第5章:

首选单个大型装配而不是多个装配 较小的装配

为了帮助减少应用程序的工作集,您应该更喜欢单个更大的工作集 组件而不是多个较小的组件。如果你有几个组件 总是加载在一起,你应该组合它们并创建一个单独的 部件。

可以归因于具有多个较小组件的开销 以下内容:

  • 为较小的程序集加载元数据的成本。
  • 按顺序触摸CLR中预编译图像中的各种存储页面 加载程序集(如果它是使用Ngen.exe预编译的)。
  • JIT编译时间。
  • 安全检查。

因为您只为程序访问的内存页面付费,所以更大 程序集为Native Image Generator实用程序(Ngen.exe)提供了更大的功能 有机会优化它产生的原生图像。更好的图像布局意味着 必要的数据可以更密集地布局,这反过来意味着整体更少 与多个布局相同的代码相比,需要使用页面来完成工作 组件。

有时你无法避免分裂组件;例如,用于版本控制和 部署原因。如果您需要单独发货,可能需要单独发货 组件。

答案 1 :(得分:10)

好吧,每次加载一个程序集时,由于分辨率的损失,会有一些命中 - 找到正确的文件,可能会验证版本号等。这可能主要是在开始时 - 起来。

但是,我认为它不会显着影响“稳态”表现。

答案 2 :(得分:6)

紧凑的框架DLL将始终加载到64 kb的最小内存空间,无论它有多小。因此,加载四个独立的10 kb CF DLL将在设备上花费256 kb。如果你将它们组合在一起(ILMerge),它只会花费你64 kb的内存。

答案 3 :(得分:4)

我从未遇到过追踪到大小或数量的程序集的性能。我追踪的绝大多数重要性能问题都是算法弱点的结果。

正如Jon Skeet所说,由于启动时的解决方案,可能会有一些小的打击。 lassevk也对通过反射动态分辨装配有一点意见。但是,在程序过程中,这些都不会对性能产生多次影响,并且在正常情况下可能不会显着影响性能,除非您在一些非常严格的性能约束条件下工作。

或许有一些关于问题的其他背景会有所帮助。你问这个问题是因为你有一个带有很多大型装配的软件,而你正试图加快它的速度吗?

答案 4 :(得分:1)

我非常怀疑它会影响性能到任何可衡量的程度。在启动时加载会有一些惩罚;并且内存使用量可能会增加一两MB,但除此之外 - 没有。好吧,除非你自己编写因此而受到影响的代码。

那就是说,我没有看过任何测试,所以我可能错了。

答案 5 :(得分:0)

我知道的一件事会影响性能,与装配尺寸有关,至少如果装配尺寸与类数,方法等有关。

如果使用反射并对所有程序集使用类似的循环,则对于这些程序集中的所有类型,检查它们是否具有属性等。。这可能是JIT静态构造函数,并在某些情况下调用它们。

啊,看到乔恩的回答,忘了提。 JIT的代码只会在每段代码中发生一次,所以如果你所做的只是反映类型,并且从不触及它们,那么程序集的大小将影响反射循环的持续时间,但之后它根本不重要。

答案 6 :(得分:0)

我同意Dan的回答,只是添加更多信息:这是支持这一观点的另一篇相关博文:http://blogs.msdn.com/junfeng/archive/2004/02/23/78139.aspx

答案 7 :(得分:-2)

不,它不会影响

答案 8 :(得分:-3)

未使用的局部变量和不必要的赋值会增加装配的大小并降低性能。

相关问题