提问人:Pavel Voronin 提问时间:11/23/2022 更新时间:7/21/2023 访问量:304
面向 .netstandard2.0 但在 .NET 7 上运行的程序集是否会从最新的运行时获得所有性能提升?
Will assembly which targets .netstandard2.0 but runs on .NET 7 get all the performance boost from the latest runtime?
问:
我可以选择将程序集定位为 .netstandard2.0 或 .net7.0
。如果我不需要 C# 的最新功能,那么在 .NET 上运行我的应用程序时,它最终会对性能产生任何影响吗?
AFAIK、JIT 和 BCL 中的类型由运行时提供,因此该领域的改进应该会对性能产生积极影响。
从理论上讲,C# 编译器可以发出 IL,而 IL 缺少一些由较新的运行时支持的新指令,因此 IL 代码可能比它本来的样子稍微不那么理想,如果 .NET7 是靶点。
我是否遗漏了任何可能阻碍性能的东西?
答:
2赞
Batesias
7/21/2023
#1
是的,当从 .Net 7 应用程序运行时,您的库将受益于 .Net 7 性能改进。netstandard2.0
为了测试这一点,我在一个库中编写了一些基准代码(使用 Linq,它在 .Net 7 中得到了显着改进),然后我从 2 个单独的控制台应用程序(一个目标和另一个)引用该代码。
性能差异与此处描述的性能差异类似,即使 Linq 代码内置于单独的 dll 中也是如此。netstandard2.0
net6.0
net7.0
netstandard2.0
此外,当我将库的目标从 更改为 时,基准测试会产生类似的结果。(有些测试更好,有些测试最差,所以我认为它在误差范围内。我不清楚一个是否比另一个更好,所以我个人会根据跨平台定位指南而不是性能来选择目标。netstandard2.0
net7.0
上一个:C# 了解中间语言
评论