Си диез / Говнокод #11619 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
public static int getRandomNumber(int from, int to)
{
       System.Threading.Thread.Sleep(10);
       Random r = new Random();
       int var = r.Next(from, to);
       return var;
}

No comments

Запостил: bazhenovc bazhenovc, (Updated )

Комментарии (17) RSS

    • Нет. Здесь каждый раз переинициализируется класс, и если вызывать этот код в цикле - можно запросто словить 5-10 одинаковых значений.
      Но программист настолько суров, что вместо того, чтобы вынести класс за пределы фунции, ждёт пока сменится рандом сид, зависящий от таймера

      В общем это труЪговнокод.
      Ответить
      • > переинициализируется класс, и если вызывать этот код в цикле - можно запросто словить 5-10 одинаковых значений
        ну здесь же нет стартового сида, поэтому трудно сказать, будут последовательности одинаковы, или нет
        Ответить
        • По дефолту, при создании Random - старовый seed равен - Environment.TickCount. И поэтому при быстром создании Random обьектов, seed может совпадать. Автор не понял причины проблемы, и сделал фикс через одно место.
          Ответить
          • Причём, как я понимаю, если не знать причины, то такой фикс можно сделать только наугад?
            Ответить
            • Причину можно легко узнать из MSDN-а http://msdn.microsoft.com/ru-ru/library/h343ddh9.aspx
              Либо с помощью Reflector и подобных посмотреть исходный код.

              Имхо, чтобы использовать рандомную генерацию, нужно хотя бы знать, что она зависит от начального seed, а не просто тупо скопипастить сэмпл из гугла. Что автор скорее всего и сделал.
              Ответить
              • public static void Main()
                {
                   Random rand1 = new Random();
                   Random rand2 = new Random();
                   Thread.Sleep(2000);
                   Random rand3 = new Random();
                   ShowRandomNumbers(rand1);
                   ShowRandomNumbers(rand2);
                   ShowRandomNumbers(rand3);
                }


                Так вот откуда ноги растут!
                Ответить
      • А я было подумал, что это заглушка для тестирования какая-нибудь, причем пока недописанная.
        Ответить
  • По объекту на каждый вызов. Стресс-тест GC.
    Ответить
      • Конкретно с потокобезопасностью тут всё в порядке, потому как для каждого вызова создастся свой объект.
        Ответить
        • А. Вот граждане меня минусуют. Но я не вижу обоснованной критики.

          >Конкретно с потокобезопасностью тут всё в порядке
          Спасибо кеп, мой вопрос о другом.
          Ответить
          • Политика .net по потокобезопасности гласит:
            Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
            Ответить
    • >По объекту на каждый вызов.
      первый признак конструктора
      Ответить
  • В конце поста автор этого кода опубликовал коммент - "Спасибо за критику, спасибо пользователю general, он спустил меня на землю. Исправлю функции, жестоко протестирую и опубликую топик вновь.".
    Теперь нужно подождать нового топика чтобы понять, извлек ли он из этого что-то полезное.
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8