私は現在、metro hash implementonをC#7の機能を使用するように移植しています。 ハッシュはulong[4]
配列の計算を行いますが、結果は16 byte
の配列になります。現在、ulong
の配列を結果のbyte
バッファにコピーしていますが、これには少し時間がかかります。 System.Runtime.CompilerServices.Unsafe
ここで使用しても安全である場合 はので、私は思ったんだけど:バイト配列からulong配列への変換
var result = new byte[16];
ulong[] state = Unsafe.As<byte[], ulong[]>(ref result);
ref var firstState = ref state[0];
ref var secondState = ref state[1];
ulong thirdState = 0;
ulong fourthState = 0;
上記のコードは、私は私の状態計算の部分についても、結果バッファを使用していないだけで、最終的な出力のためだということを意味します。
私の単体テストは成功し、benchmarkdotnetによると、ブロックコピーをスキップすると、が20%のパフォーマンスが向上します。これは、それが正しいかどうかを調べるのに十分です。
ようこそ、最初の質問! –
あなたがやっていることは、struct(これはhttp://stackoverflow.com/a/35841815/613130)を介したキャストの古い "トリック"です... 'state.Length'をチェックすると、違います"。 – xanatos
あなたが見つけた非常に興味深い図書館 – xanatos