Рандом.Next постоянно отдаёт минимум

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Прежде всего речь пойдёт не о той ситуации, когда мы каждую итерацию заново инициализируем рандом и за счёт одного и того же момента времени он отдаёт нам одно и тоже значение.

Итак, есть код
Код:
int folders_count_min = int.Parse(project.Variables["folders_count_min"].Value);
int folders_count_max = int.Parse(project.Variables["folders_count_max"].Value);
int folders_count = Global.Classes.rnd.Next(folders_count_min, folders_count_max);
ещё есть код
Код:
var rnd = Global.Classes.rnd;

int cat_count_min = int.Parse(project.Variables["cat_count_min"].Value);
int cat_count_max = int.Parse(project.Variables["cat_count_max"].Value);
int cat_count = rnd.Next(cat_count_min, cat_count_max+1);
а ещё есть код в классе общего кода
Код:
public Random rnd = new Random();
Инициализируется единожды и дальше внутри обекта множество раз вызывается.

Бывает что-то ломается (возможно, за пределами зеннопостера) и метод .Next начинает всегда возвращать минимальное значение. Лечится только перезагрузкой зеннопостера.

Сталкивался ли кто с таким? Есть ли решение?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 371
Благодарностей
3 295
Баллы
113
Есть ли решение?
Что-то примерно такое:
Код:
int Seed = int.Parse(Thread.CurrentThread.ManagedThreadId.ToString() +
                     Process.GetCurrentProcess().Id.ToString() +
                     DateTime.Now.Millisecond.ToString());
Random _rnd = new Random(Seed);
...
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Что-то примерно такое:
Код:
int Seed = int.Parse(Thread.CurrentThread.ManagedThreadId.ToString() +
                     Process.GetCurrentProcess().Id.ToString() +
                     DateTime.Now.Millisecond.ToString());
Random _rnd = new Random(Seed);
...
А в чём была проблема? Просто это не выглядит как-то отличимо по смыслу от рандома без конструктора.
Т.е. дополню. Мой шаблон может работать в 1 поток. Он за выполнение может вызывать метод тысячи раз. Объявляется рандом единожды. Когда что-то ломается - .Next начинает возвращать всегда минимум. И в этом потоке. И в последующих. Вплоть до перезагрузки
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 371
Благодарностей
3 295
Баллы
113
  • Спасибо
Реакции: doc

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)