2

Utf8としてエンコードされた事前に割り当てられたアンマネージバッファにC#文字列を書き込む必要があります。回答する前に、次の要件をお読みください。

  • 新しい割り当てはありません(バイト配列やその他のインスタンス化の作成に関する回答に私を誘導しないでください)
  • アンマネージコードへの移行なし(pinvoke / calliなし)

現在、OpCodes.Cpblkを使用して、生の文字列をC#からアンマネージバッファに16ビット文字を使用してコピーしています。これにより、x64アーキテクチャでアンマネージドmemcpyを使用する場合とほぼ同じパフォーマンスが得られ、スループットをそれに近づける必要があります。

文字列をchar *として修正し、それを反復処理することを検討していますが、ジャンプテーブルなしでエンコーダーを実装することは、パフォーマンスに関しては面倒であり、最適とは言えません。

4

1 に答える 1

7

安全でない過負荷を使用する

public override unsafe int GetChars(byte* bytes, int byteCount, char* chars, int charCount)

UTF8Encodingクラスの。文字列へのポインタと、文字を受け取るバイトバッファを指定する必要があります。UTF-8文字をコピーします。割り当ては行われませんが、安全でないコードが必要になります。

于 2012-01-31T20:02:36.057 に答える