生成 .NET Standard 2.0 库的 .NET 6.0 版本有什么好处吗?

Blu*_*rat 8 .net-standard-2.0 .net-6.0

如果我有一个 .NET Standard 2.0 库项目正在被 .NET 6.0 控制台项目使用,那么如果我还指示编译器生成该库的 .NET 6.0 版本,是否会有任何性能优势?

我不打算使用 .NET 6.0 上提供的任何功能,我只是想知道 .NET 6.0 版本是否受到编译器的额外喜爱。

Blu*_*rat 12

在 Twitter 上问了同样的问题,并很幸运地收到了知名专家Bartosz AdamczewskiImmo LandwerthJared ParsonsLucas Trzesniewski的反馈

\n

这是问题链接

\n

以下是您可以从原始 Twitter 帖子中提取的最相关的信息:

\n
\n

您可能会获得更好的 IL,因此前端编译器 C# 可以更好地处理字符串和某些\n其他内容,并生成\n更好的 IL,这反过来又可以在 JIT 中提供更好的代码生成 - Bartosz Adamczewski

\n
\n
\n

@jaredpar 可以纠正我,但在大多数情况下,代码生成是 \xe2\x80\x99t\n 取决于目标框架,除了代码生成\n用户特定 API 的情况,这种情况很少见。——伊莫·兰德沃斯

\n
\n
\n

那是对的。在编译器级别,没有目标框架的概念,只有引用。因此,有关代码\ngen 的所有决策均基于参考文献中的 API。——贾里德·帕森斯

\n
\n
\n

对于 .NET 6,您将可以访问一些新的 API,例如 \n DefaultInterpolatedStringHandler,因此,例如,所有字符串插值表达式 ($"...") 将通过目标\n获得性能提升net6.0。此外,还有新的方法重载,例如StringBuilder.Append将字符串插值处理程序作为参数。您的字符串插值表达式将针对这些\而不是针对 net6.0,并且您的代码将分配少于\非其他目标。所以,是的,在某些情况下,如果您添加 net6.0 目标,您的代码将得到编译器的更多\n喜爱 - Lucas\nTrzesniewski

\n
\n