1. C# / Говнокод #25990

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    public class HttpQueryNameValueCollection : NameValueCollection
        {
            private ParallelLoopResult _parallelLoopResult;
    
            public override string ToString()
            {
                List<string> result;
                result = new List<string>();
                _parallelLoopResult = Parallel.ForEach(AllKeys, p =>
                {
                    if (BaseGet(p) != null)
                        result.Add(p + "=" + Get(p));
                });
                return string.Join("&", result);
            }
        }

    Формирование ссылки с query-параметрами недостаточно быстро, поэтому нужно это сделать в параллель :D

    Запостил: adoconnection, 24 Октября 2019

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

    • багор
      Ответить
    • параллельный код в toString это неожиданно:)
      Ответить
    • а где lock, synchronized, critical section и вот это вот все для доступа из разных тредов?
      Ответить
      • действительно

        тут либо гонки, Либо неебические расходы на синхронизацию
        Ответить
      • Что может случиться, кроме непредсказуемого порядка параметров в запросе?
        Ответить
        • зависит от потокобезопасности List
          вероятно, может и распидорасить, если он не потокбезопасен
          Ответить
          • Если делать по уму - ничего не распидорасит. Для тебя, глупая мартышка, ничто не является безопасным, и в руки тебе ничего давать нельзя.
            Ответить
          • На всякий случай напоминаю тебе, что отвечать безграмотному уёбку, который косит под superkiller1997, не нужно
            Ответить
            • Запили бота, который будет под каждым комментарием уёбков оставлять такую пометку. В наше трудное время хрен поймёшь, кто прикалывается, а кто реально уёбок.
              Ответить
        • В лист добавится меньше записей, чем планировал кастующий параллелизм.

          Пруф:
          static void Main(string[] args)
          {
              List<string> result = new List<string>();
          
              Parallel.ForEach(Enumerable.Range(1, 100000), p =>
              {
                      result.Add(p.ToString());
              });
          
              Console.WriteLine(result.Count);
              Console.ReadKey();
          }
          Ответить
      • Школота умных словечек научила.
        Ответить

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