1. Pascal / Говнокод #14109

    +138

    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
    17. 17
    // прога у нас многопоточная, данный код выполняется в потоке. Создание и настройка Idhttp прописана в конструкторе потока.
    while not terminated do
        begin
           synchronize(ReadProxy);
            if ThreadExit then break;
            try
               memorystream.Position:=0;
              try
                idHTTP.Get(linknew,memorystream);
                idhttp.disconnect;
              except
                idhttp.Disconnect;
              end;
              finally
                temp:=memorystreamtostring(memorystream); // если этого не сделать, память будет утекать.
                memorystream.clear;
              end;

    Я нашел способ предотвратить утечки памяти в Indy, при Get-запросе -
    многие грешат на Indy, мол, нестабильная она в потоках, провоцирует утечки.
    Оказалось, что дело-то в tmemorystream, я его маму бля ебал!!!

    Запостил: Stertor, 19 Ноября 2013

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

    • Насколько я понимаю, иногда из-за глюков Indy возникает исключение, которое не обрабатывается :
      try
                 memorystream.Position:=0;
                try
                  idHTTP.Get(linknew,memorystream);
                  idhttp.disconnect;
                except // исключение не всегда  обрабатывается.
                  idhttp.Disconnect;
                end;
                finally
                  temp:=memorystreamtostring(memorystream);
                  memorystream.clear;
                end;


      но так как освобождение памяти стоит в блоке try...finally, память не забивается. Проверено.
      Ответить
    • Ты ошибался. течёт как раз таки IdHTTP, точнее, модуль IdStack.
      Ответить

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