Random ran = new Random();
byte tmp = (byte)ran.Next(10);
Есть ли альтернатива этому коду? Похоже, что это не случайное поведение.
Random ran = new Random();
byte tmp = (byte)ran.Next(10);
Есть ли альтернатива этому коду? Похоже, что это не случайное поведение.
Есть несколько причин, почему это может произойти. Одной из распространенных проблем является создание нескольких экземпляров класса Random
в программе. При использовании класса Random
вы должны создавать только один экземпляр и генерировать из него числа. Статья " Создание лучших случайных чисел в С#" содержит хорошее объяснение причин и объясняет, почему не выполнение этого может привести к проблеме.
Другой распространенный сценарий - доступ к объекту класса Random
из нескольких потоков. System.Random
не является поточно-ориентированным (см. Раздел "Примечания" в документации по Random
) и, таким образом, может привести к неожиданному и нежелательному поведению. Если вы используете его в многопоточной среде, вам нужно обязательно использовать некоторую форму блокировки, чтобы предотвратить одновременное создание случайными числами нескольких потоков.
Для более высоких степеней безопасности и случайности вы можете использовать криптографически безопасный генератор случайных чисел, такой как System.Security.Cryptography.RNGCryptoServiceProvider. Обратите внимание, что использование более безопасного генератора случайных чисел приведет к снижению производительности по сравнению с System.Random
.
Это может быть проще. Если вы можете использовать этот метод в замкнутом цикле:
for (int i = 0; i < 1000; i++)
{
Random ran = new Random();
byte tmp;
tmp = (byte)ran.Next(10);
}
Вы можете видеть одно и то же число снова и снова. Убедитесь, что вы создаете объект Random вне любых циклов.
Random ran = new Random();
for (int i = 0; i < 1000; i++)
{
byte tmp;
tmp = (byte)ran.Next(10);
}
Тем не менее, правда, что поставщик криптографии лучше. Но вы только получаете рэндомы между 0 и 9, так как случайным это должно быть?
Вы также можете рассмотреть API-интерфейс random.org