Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET程序集的性能_.net_Performance_Assemblies_Ilmerge - Fatal编程技术网

.NET程序集的性能

.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的功能时,它们的性能是否会有任何差异?如果是的话,

我有两个.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的功能时,它们的性能是否会有任何差异?如果是的话,这种性能差异有多大,是一次性的(加载时?)差异还是持续的差异?这两种方法还有其他的优点或缺点吗?

我确信它不会产生完全相同的IL,但它将非常接近,我无法想象这两种方法之间有任何明显的区别。除了ILMerge方法可能更方便、更易于维护之外,我认为这两种解决方案的结果是相同的。

为什么它不会产生完全相同的IL?为什么ILMerge必须发出新的IL?IL的大部分将是相同的,但ILMerge确实进行了一些转换。其中一些是可配置的,比如合并类型定义。其中一些与程序集级属性有关。我认为它可以更改类型可见性等。请注意,所有这些都不会影响程序集的性能。