C#で2バイト配列を追加するための最良の(以下を参照)方法はありますか?
完全に制御できるふりをして、最初のバイト配列を十分に大きくして、最後に2番目のバイト配列を保持し、Array.CopyTo関数を使用できます。または、個々のバイトをループして割り当てを行うこともできます。
より良い方法はありますか?バイト配列を文字列に変換して結合し、それらを元に戻すようなことを行うことは、上記のどちらの方法よりも優れているとは想像できません。
最高/より良い(順番に)に関して:
- 最速
- 最小のRAM消費
制約は、.NET2.0フレームワークで作業する必要があるということです。
推奨される2つの選択肢は、MemoryStreamとBlockCopyです。10,000,000ループの簡単な速度テストを3回実行したところ、次の結果が得られました。
ミリ秒単位での10,000,000ループの平均3回の実行:
- BlockCopy時間:1154、範囲は13ミリ秒
- MemoryStream GetBuffer時間:1470、範囲は14ミリ秒
- MemoryStream ToArray時間:1895、範囲は3ミリ秒
- CopyTo時間:2079、範囲は19ミリ秒
- バイトごとの時間:2203、範囲は10ミリ秒
1000万ループを超えるList<byte> AddRangeの結果:List <byte>時間:16694
相対RAM消費量(1はベースライン、高いほど悪い):
- バイトごと:1
- BlockCopy:1
- コピー先:1
- MemoryStream GetBuffer:2.3
- MemoryStream ToArray:3.3
- リスト<バイト>:4.2
テストは、一般に、バイトコピーを大量に実行している場合を除いて、バイトコピーを確認することは、焦点を当てる価値がないことを示しています[たとえば、1,000万回の実行で1.1秒の差が生じます]。