就目前而言,许多“高级”字符串函数,如IndexOf
、 LastIndexOf
、 Replace
等,当它们可以用托管代码编写时是本地实现的。 我注意到这是通过 f007485 中的string.Replace
重载之一完成的,所以如果新手不熟悉 C++ 代码如何映射到C#。
我们过去曾对此进行过研究,并移动了所有可以移动而不会造成重大性能损失的内容。 移动更多取决于对所有 coreclr 架构进行很好的托管优化。
只有当运行 coreclr 的所有架构(x86、x64、arm、arm64)都可以使用 RyuJIT 或更好的代码生成时,才考虑这样做是有意义的。
顺便说一句:所有字符串方法的托管实现都可以在 corert 存储库中找到。
@jkotas啊,这就是管理 corert 存储库中的实现的原因; 由于它是通过 AOT 编译并由 C++ 编译器优化的,因此它们获得了比 JIT 实现更好的代码生成器,对于您提到的某些平台(arm、arm64),JIT 实现仍在进行中。 感谢您澄清这一点,现在有意义了。
从上面的@jkotas响应结束,这里没有什么@jamesqo 可以随时重新打开。
最有用的评论
我们过去曾对此进行过研究,并移动了所有可以移动而不会造成重大性能损失的内容。 移动更多取决于对所有 coreclr 架构进行很好的托管优化。
只有当运行 coreclr 的所有架构(x86、x64、arm、arm64)都可以使用 RyuJIT 或更好的代码生成时,才考虑这样做是有意义的。
顺便说一句:所有字符串方法的托管实现都可以在 corert 存储库中找到。