.NET程序集的性能
我有两个.NET库:“Foo.Bar”和“Foo.Baz”。.NET程序集的性能,.net,performance,assemblies,ilmerge,.net,Performance,Assemblies,Ilmerge,我有两个.NET库:“Foo.Bar”和“Foo.Baz”。 “Foo.Bar”是自包含的,而“Foo.Baz”引用“Foo.Bar” 假设我执行以下操作: 使用ILMerge将“Foo.Bar.dll”与“Foo.Baz.dll”合并为“Foo1.dll” 创建一个包含“Foo.Bar”和“Foo.Baz”的完整性的新解决方案(因为我可以访问它们的源代码),并将其编译成“Foo2.dll” 当从外部项目使用Foo1.dll和Foo2.dll的功能时,它们的性能是否会有任何差异?如果是的话,
“Foo.Bar”是自包含的,而“Foo.Baz”引用“Foo.Bar” 假设我执行以下操作:
- 使用ILMerge将“Foo.Bar.dll”与“Foo.Baz.dll”合并为“Foo1.dll”
- 创建一个包含“Foo.Bar”和“Foo.Baz”的完整性的新解决方案(因为我可以访问它们的源代码),并将其编译成“Foo2.dll”
当从外部项目使用Foo1.dll和Foo2.dll的功能时,它们的性能是否会有任何差异?如果是的话,这种性能差异有多大,是一次性的(加载时?)差异还是持续的差异?这两种方法还有其他的优点或缺点吗?我确信它不会产生完全相同的IL,但它将非常接近,我无法想象这两种方法之间有任何明显的区别。除了ILMerge方法可能更方便、更易于维护之外,我认为这两种解决方案的结果是相同的。为什么它不会产生完全相同的IL?为什么ILMerge必须发出新的IL?IL的大部分将是相同的,但ILMerge确实进行了一些转换。其中一些是可配置的,比如合并类型定义。其中一些与程序集级属性有关。我认为它可以更改类型可见性等。请注意,所有这些都不会影响程序集的性能。