現状では、 IndexOf
、 LastIndexOf
、 Replace
などの多くの「高レベル」文字列関数は、マネージコードで記述できる場合にネイティブに実装されます。 これはf007485のstring.Replace
オーバーロードの1つで行われていることに気づいたので、C ++コードがどのようにマップされるかをよく知らない場合は、コードをよりアクセスしやすくするためにこれを行うとよいでしょう。 NS#。
私たちは過去にこれを調査し、パフォーマンスを大幅に低下させることなく移動できるすべてのものを移動しました。 さらに移動するには、すべてのcoreclrアーキテクチャに対してかなり適切に管理された最適化を行う必要があります。
これは、coreclrが実行されるすべてのアーキテクチャ(x86、x64、arm、arm64)でRyuJIT以上のcodegenが利用可能になったときにのみ検討するのが理にかなっています。
ところで:すべての文字列メソッドのマネージド実装は、corertリポジトリで利用できます。
@jkotasああ、それがcorertリポジトリの実装が管理されている理由です。 AOTでコンパイルされ、C ++コンパイラによって最適化されているため、JIT実装よりも優れたコード生成が得られます。これは、言及した一部のプラットフォーム(arm、arm64)でまだ進行中です。 それをクリアしてくれてありがとう、今は理にかなっています。
上記の@jkotasの応答からのように閉じると、ここで行うことは何も残っていません。 @jamesqoは、そうでないと思われる場合は、お気軽に再開してください。
最も参考になるコメント
私たちは過去にこれを調査し、パフォーマンスを大幅に低下させることなく移動できるすべてのものを移動しました。 さらに移動するには、すべてのcoreclrアーキテクチャに対してかなり適切に管理された最適化を行う必要があります。
これは、coreclrが実行されるすべてのアーキテクチャ(x86、x64、arm、arm64)でRyuJIT以上のcodegenが利用可能になったときにのみ検討するのが理にかなっています。
ところで:すべての文字列メソッドのマネージド実装は、corertリポジトリで利用できます。