C #, Лучший 64-битный (длинный) генератор типа Guid для низких коллизий. Аналогичен Guid.NewGuid (), но для 64 бит - PullRequest
3 голосов
/ 03 августа 2011

Я хочу использовать 64-битный идентификатор, аналогичный тому, как используются Guids.Какой хороший способ сделать это?Я хочу, чтобы коллизии были низкими.

public static unsafe long GetLongGuid()
{
   unchecked
   {
      fixed (byte* ptr = Guid.NewGuid().ToByteArray())
         return *((long*)ptr) ^ *((long*)(ptr + 8));
   }
}

Стоит ли вместо этого просто брать верхний или нижний биты?

Или есть более подходящая 64-битная уникальная хэш-функция, которая хороша?

1 Ответ

2 голосов
/ 03 августа 2011

Вместо этого вы можете просто использовать генератор случайных чисел: System.Random или System.Security.Cryptography.RNGCryptoServiceProvider.

Точно, почему вы используете здесь небезопасный код, если не для производительности, мне очень непонятно.

...