<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787999</guid>
        <pubDate>Tue, 15 Jan 2019 08:38:54 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787999</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413974&view=findpost&p=3787929'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>dreyqq &#064; <time class="tag-quote__quoted-time" datetime="2019-01-14T16:55:44+03:00">14.01.19, 13:55</time></span><div class='quote '>Пробовал TXMLDocument создавать не в nil а на созданной для этого форме, и после выполнения убивать форму. Это работает. </div></div><br>
Ты каким-то хаотичным тыком занимаешься. Замеры по времени, тестовые данные, реакция инструмента отслеживания утечек наконец? А то так дошаманишься до того, чтобы каждый XML создавать в отдельном процессе, лишь бы память сама очищалась]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787929</guid>
        <pubDate>Mon, 14 Jan 2019 13:55:44 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787929</link>
        <description><![CDATA[dreyqq: out of memory вылетает после 400-500Мб в памяти. В системе 4Гб.<br>
Пробовал TXMLDocument создавать не в nil а на созданной для этого форме, и после выполнения убивать форму. Это работает. Память освобождает, НО&#33;&#33;&#33; Если делать это не в модуле формы, а в модуле без формы, то создать компонент на форме не выходит, ошибка при компилировании. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-01-14T13:57:35+00:00">14.01.19, 13:57</time></span></span><br>
Только скорость заметно падает]]></description>
        <author>dreyqq</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787828</guid>
        <pubDate>Mon, 14 Jan 2019 07:09:26 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787828</link>
        <description><![CDATA[Fr0sT: +1. Менеджер памяти не отдает ОС часть оперативы, хранит для последующих выделений.<br>Для отслеживания утечек есть специальные инструменты.<br>Либо да, грузи 1 Мб XML в цикле на ночь и смотри, будет ли расти память. Сейчас у тебя условия за пределами разрядной сетки. Условно говоря, ты стоишь в пещере и пытаешься увидеть, как растет сталактит.]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787798</guid>
        <pubDate>Sun, 13 Jan 2019 19:06:24 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787798</link>
        <description><![CDATA[Mr.Delphist: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413974&view=findpost&p=3787473'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>dreyqq &#064; <time class="tag-quote__quoted-time" datetime="2019-01-10T14:14:11+00:00">10.01.19, 14:14</time></span><div class='quote '>После 100000 раз (а загружал xml в котором только один параметр, а мне много нужно) память программы с 12мБ до примерно 80мБ в памяти</div></div><br>
Так это ж копейки, на уровне стартового выделения памяти. Попробуйте погонять всю ночь в бесконечном цикле - если память далее расти не будет, то никакая это не утечка, а обычная ahead-аллокация памяти &quot;на вырост&quot;.]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787473</guid>
        <pubDate>Thu, 10 Jan 2019 14:14:11 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787473</link>
        <description><![CDATA[dreyqq: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413974&view=findpost&p=3787397'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2019-01-09T14:59:40+00:00">09.01.19, 14:59</time></span><div class='quote '></div></div><br>
Делал<br>
После 100000 раз (а загружал xml в котором только один параметр, а мне много нужно) память программы с 12мБ до примерно 80мБ в памяти<br>
После каждого присвоения документа IIxmlNode память увеличивается. Пробовал и на статическом компоненте, и на созданном динамически. Как только выполнил<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;RootNode: IXMLNode;</div><div class="code_line">...</div><div class="code_line">RootNode := xmll_in.DocumentElement;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Так сразу память и растёт. Если IXMLnode не использовать то всё нормально, но без этого парсить никак. Если это делать в потоке, то при убивании потока память освобождается <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-01-10T14:16:43+00:00">10.01.19, 14:16</time></span></span><br>
Поэтому и хочу в потоке это делать.<br>
З.Ы. Пробовал работу с XML засунуть в библиотеку (dll) результат такой-же самый]]></description>
        <author>dreyqq</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787397</guid>
        <pubDate>Wed, 09 Jan 2019 14:59:40 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3787397</link>
        <description><![CDATA[Fr0sT: Ты что-то не так делаешь. Не может он течь.<br>Подключи вывод инфы об утечках (ReportMemoryLeaksOnShutdown).<br>Сделай простейший тест (в цикле создавай документ, загружай файл, освобождай), посмотри на прирост памяти]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3786821</guid>
        <pubDate>Tue, 01 Jan 2019 23:41:37 +0000</pubDate>
        <title>Поток с параметрами (вход и выход)</title>
        <link>https://forum.sources.ru/index.php?showtopic=413974&amp;view=findpost&amp;p=3786821</link>
        <description><![CDATA[dreyqq: При связке TIDHTTPServer и XMLDocument столкнулся с проблемой очистки памяти TXMLDocument, а именно проблема с IXMLNode. После того как этому присвоен какой-то документ, проведена его обработка и он нигде не используется, память не освобождается...<br>
<br>
Пробовал работу с TXMLDocument засунуть в поток.<br>
В потоке всё нормально. Убил поток, память освободилась... Столкнулся с проблемой...<br>
<br>
Так как запросы принимает IDHTTPServer, их  может быть много и от разных клиентов.<br>
Время обработки запроса может быть разным для каждого запроса, и если во время выполнения более длинного запроса прийдет от другого клиента более короткий запрос, то в теории если не разделять данные, тот ответ одного может попасть к другому.<br>
<br>
В программе я такое разделял в процедуре, которая возвращает параметры<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure xxx(in1:string; in2:integer; var out1:string; out2:integer);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; out1:=in1;</div><div class="code_line">&nbsp;&nbsp; out2:=in2;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">var</div><div class="code_line">myOutStr:string;</div><div class="code_line">myOutInt:integer;</div><div class="code_line">...</div><div class="code_line">xxx(&#39;myInSTR&#39;, 5, myOutStr, myOutInt);</div></ol></div></div></div></div><br>
<br>
Таким образом обратившись к данной процедуре из любого места с любыми входящими данными я буду уверен что тот кто запросил выполнение данной процедуры, получит именно свой ответ, и данные не поменяются<br>
<br>
Теперь вопрос: Как похожую процедуру реализовать но в потоке, т.е. В поток передать несколько параметров, и так-же получить из потока несколько параметров?<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">synchronize(mySync) // так не подойдет</div></ol></div></div></div></div><br>
потому что запрос, который обрабатывает сервер, и ответ клиенту обрабатывается внутри одной процедуры<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TForm1.IDHTTPServerCommandGet(AContext: TIdContext;</div><div class="code_line">&nbsp;&nbsp;ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);</div><div class="code_line">...</div></ol></div></div></div></div><br>
и мне нужно отправить данные на обработку в поток, и когда он закончит обработку, отправить их тому клиенту что запросил эту операцию, а не другому, что подключился тоже к серверу, и запросил свою операцию...]]></description>
        <author>dreyqq</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	