Obecnie szukam przeniesienia mojego metro hash implementon do korzystania z funkcji C# 7, ponieważ kilka części może skorzystać z ref lokalne, aby poprawić wydajność. Hash wykonuje obliczenia na tablicy ulong[4]
, ale wynikiem jest tablica 16 byte
. Obecnie kopiuję tablicę ulong
do bufora wyniku byte
, ale zajmuje to trochę czasu. Więc zastanawiam się czy System.Runtime.CompilerServices.Unsafe
jest bezpieczny w użyciu tutaj:Unsafe.As z tablicy bajtów do tablicy 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;
Powyższy kod urywek oznacza, że używam bufor wynikają także dla części moich obliczeń państwowych, a nie tylko do ostatecznego wyjścia.
Moje testy jednostkowe zakończyły się sukcesem i zgodnie z benchmarkdnetnet pomijanie kopii bloku spowodowałoby wzrost wydajności o jeden stopień, który jest wystarczająco wysoki, aby sprawdzić, czy jest ono poprawne.
Witaj tutaj i dobre pierwsze pytanie! –
To, co robisz, to stara "sztuczka" rzucania przez strukturę (ta jedna http://stackoverflow.com/a/35841815/613130) ... Jeśli zaznaczysz 'stan.Length' zobaczysz, że to jest złe". – xanatos
Wciąż bardzo interesująca biblioteka, którą znalazłeś :-) – xanatos