﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Утечки памяти при бэктестинге</title>
  <id>~/topic/4379/utechki-pamyati-pri-behktestinge/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-10T17:06:58Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=4379" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/29762/</id>
    <title type="text">Ночи доброй всем. Собственно, интересует вопрос относительно memory leak&amp;apos;ов и корректного удаления о...</title>
    <published>2014-02-23T11:01:01Z</published>
    <updated>2016-08-16T00:16:56Z</updated>
    <author>
      <name>AntonySS</name>
      <uri>https://stocksharp.ru/users/6247/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Rebelion &lt;a href="https://stocksharp.ru/posts/m/29751/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Ночи доброй всем.&lt;br /&gt;&lt;br /&gt;Собственно, интересует вопрос относительно memory leak&amp;#39;ов и корректного удаления объектов. Версия 4.2.2.6 (забыл указать сразу вначале).&lt;br /&gt;&lt;br /&gt;Сейчас имею следующий код:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;


                                            strategy.CancelActiveOrders();
                                            strategy.ChildStrategies.DisposeAll();
                                            strategy.DoDispose();

                                            trader.Disconnect();

                                            candleManager.Series.DoDispose();
                                            candleManager.DoDispose();

                                            series.DoDispose();

                                            basketTrader.InnerConnectors.Remove(trader);
                                            trader.DoDispose();
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.&lt;br /&gt;&lt;br /&gt;За сим, собственно, вопрос - какая стратегия очистки данных должна быть реализована? Помню, вопрос про утечки памяти поднимался ранее, но вроде же всё пофиксили?&lt;br /&gt;&lt;br /&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. Подскажите, плз, какой-нибудь адекватный бесплатный профайлер для .NET.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Добрый день!&lt;br /&gt;&lt;br /&gt;Некоторое время назад столкнулся с аналогичной проблемой &lt;a href="http://stocksharp.com/forum/4304/LinkedListNode----kak-unichtozhit--obiekt/" title="http://stocksharp.com/forum/4304/LinkedListNode----kak-unichtozhit--obiekt/"&gt;http://stocksharp.com/forum/430...kak-unichtozhit--obiekt/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Метод Dispose не помогал, поэтому я подумал и решил что раз избавиться от объемного объекта не получается, то нужно создать вместо него новый, но пустой и соответственно маленький&lt;br /&gt;&lt;br /&gt;Сделал я следующее&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
									strategy.Stop();
									candleManager.Stop(candleSeries);
									if (strategy.Connector != null) strategy.Connector.Dispose();
									strategy.Dispose();
									strategy.Connector = null;
									strategy = null;
									candleSeries = null;
									candleManager.Container = new CandleManagerContainer();
									if (candleManager != null) candleManager.Dispose();
									if (connector.MarketEmulator != null) connector.MarketEmulator.Dispose();
									if (connector != null) connector.Dispose();
									if (StorageRegistry != null) StorageRegistry.DoDispose();
									if (LogManager != null) LogManager.Dispose();
									if (security != null) security.DoDispose();
									candleManager = null;
									connector = null;
									StorageRegistry = null;
									LogManager = null;
									basketConnector = null;
									security = null;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ключевой элемент:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
candleManager.Container = new CandleManagerContainer();&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Не буду утверждать что я смог таким образом устранить утечку, но память начала освобождаться.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29811/</id>
    <title type="text">Rebelion,сними снимок памяти и посмотри...но по моим наблюдениям не много она жрет, по крайнее мере ...</title>
    <published>2014-02-26T06:29:43Z</published>
    <updated>2014-02-26T06:29:43Z</updated>
    <author>
      <name>casper-ss</name>
      <uri>https://stocksharp.ru/users/26936/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Rebelion,сними снимок памяти и посмотри...но по моим наблюдениям не много она жрет, по крайнее мере терпимо, а вот что действительно разростается, так это всевозможные коллекции с обьектом trade...они и жрут память...у самого такая же фигня как у вас, правда до 16 гигов не доходило никогда, максимум 1-1,5 при торговле...на втором месте transaction и на третьем orders...остальное все не существенно...</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29789/</id>
    <title type="text">Да, ещё такой вопросинг - а сколько жрёт график PnL&amp;apos;я? Просто я отрисовываю для каждого прогона PnL,...</title>
    <published>2014-02-25T13:10:01Z</published>
    <updated>2014-02-25T13:10:01Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Да, ещё такой вопросинг - а сколько жрёт график PnL&amp;#39;я? Просто я отрисовываю для каждого прогона PnL, чтобы посмотреть распределение относительно 0 профита/лосса. Может, из-за этого память забивается? Сегодня попробую налабать тестер без визуализации - посмотрим на скорость и мемори лики, о результатах сообщу.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29761/</id>
    <title type="text"> Да, и ещё вопрос - как убрать в CandleManager&amp;apos;е временные отрезки, в которых не нужно генерировать ...</title>
    <published>2014-02-23T09:33:57Z</published>
    <updated>2014-02-23T09:33:57Z</updated>
    <author>
      <name>Andrii</name>
      <uri>https://stocksharp.ru/users/27996/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Rebelion &lt;a href="https://stocksharp.ru/posts/m/29760/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Да, и ещё вопрос - как убрать в CandleManager&amp;#39;е временные отрезки, в которых не нужно генерировать ничего? Т.е. чтобы у меня CandleManager шпарил данные только с 10:00 до 18:50? Можно кусочек кода маленький? Плз!&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;думаю где-то здесь собака зарыта, CandleSeries.WorkingTime&lt;br /&gt;но не проверял, догадка</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29760/</id>
    <title type="text">Доброго времени суток! Здесь, соответственно, всё почти что стандартно, как в примерах. Но память те...</title>
    <published>2014-02-22T23:57:13Z</published>
    <updated>2014-02-23T00:44:23Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Bond &lt;a href="https://stocksharp.ru/posts/m/29757/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Доброго времени суток!&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Хардкор. На тиках тестируете?&lt;br /&gt;&lt;br /&gt;Можно еще strategy = null, trader = null обнулять, но выше указанных операций должно хватить с головой. Вряд ли поможет.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Если многопоточное тестирование, то имеет. А так вроде не принципиально.&lt;br /&gt;&lt;br /&gt;Мне кажется, что у вас с кодом что-то не так. Даже на S# тестере у меня не было таких утечек. Хотя, если тики, то может быть...&lt;br /&gt;Потому что, на сколько я помню, когда тестируешь на свечках после использования свечка уничтожается, чтобы не есть память.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Не совсем. Тесты идут на RenkoCandle, которые из тихов формируются. В стаканогенераторе квант обновления - 15 миллисекунд.&lt;br /&gt;Да, тестирование именно многопоточное (Монте-Карло гоняю) с синхронизацией через SemaphoreSlim.&lt;br /&gt;strategy = null, trader = null - эффекта ноль. Т.е. память всё же где-то накапливается, что странно, конечно, т.к. нигде навроде привязок внешних объектов ни к стратегии, ни к трейдеру навроде не идёт, чтобы они могли зависнуть на неопределённо долгий срок и не мочь быть собранными сборщиком мусора.&lt;br /&gt;&lt;br /&gt;Сейчас попробую 4.2.2.15, до этого тесты были на 4.2.2.6&lt;br /&gt;&lt;br /&gt;Собственно, и хочу разобраться, что к чему - хочу понять стратегию удаления объектов, связанных со стратегией и трейдером. Потому как скорее всего проблемы именно у меня.&lt;br /&gt;Опять же, оффтоп, - порекомендуйте нормальный халявный профайлер для .NET, чтобы не шаровварный был.&lt;br /&gt;&lt;br /&gt;Да, и ещё вопрос - как убрать в CandleManager&amp;#39;е временные отрезки, в которых не нужно генерировать ничего? Т.е. чтобы у меня CandleManager шпарил данные только с 10:00 до 18:50? Можно кусочек кода маленький? Плз!</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29751/</id>
    <title type="text">Ночи доброй всем. Собственно, интересует вопрос относительно memory leak&amp;apos;ов и корректного удаления о...</title>
    <published>2014-02-21T22:13:47Z</published>
    <updated>2014-02-22T23:57:38Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Ночи доброй всем.&lt;br /&gt;&lt;br /&gt;Собственно, интересует вопрос относительно memory leak&amp;#39;ов и корректного удаления объектов. Версия 4.2.2.6 (забыл указать сразу вначале).&lt;br /&gt;&lt;br /&gt;Сейчас имею следующий код:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;


                                            strategy.CancelActiveOrders();
                                            strategy.ChildStrategies.DisposeAll();
                                            strategy.DoDispose();

                                            trader.Disconnect();

                                            candleManager.Series.DoDispose();
                                            candleManager.DoDispose();

                                            series.DoDispose();

                                            basketTrader.InnerConnectors.Remove(trader);
                                            trader.DoDispose();
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.&lt;br /&gt;&lt;br /&gt;За сим, собственно, вопрос - какая стратегия очистки данных должна быть реализована? Помню, вопрос про утечки памяти поднимался ранее, но вроде же всё пофиксили?&lt;br /&gt;&lt;br /&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. Подскажите, плз, какой-нибудь адекватный бесплатный профайлер для .NET.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29759/</id>
    <title type="text">Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из б...</title>
    <published>2014-02-22T23:53:11Z</published>
    <updated>2014-02-22T23:53:11Z</updated>
    <author>
      <name>Rebelion</name>
      <uri>https://stocksharp.ru/users/28840/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;devruss &lt;a href="https://stocksharp.ru/posts/m/29758/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из базы тики и налету формирует свечки. При этом память жрется дико, так что если прогонять несколько стратегий последовательно - может память и утекает на копии одного дня тиков на разные стратегии&lt;br /&gt;&lt;br /&gt;Как заставить S# смотреть сразу свечки я не нашел, это вообще можно сделать?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Насчёт этого не знаю, если честно, - тут нужно на курсы идти. &lt;br /&gt;Насчёт отжирания оперативы - я просто после каждого прогона чищу за собой, но постепенно память утекает. Т.е. первые 10 нитей отрабатыают на 6-8 гб, потом постепенно на 20-30 нитях дорастает до 11-12 гб, дальше уже начинается тупняк. Я просто пулами по 10-15 нитей запускаю, каждая нить у меня к моему планировщику вызовов к R коннектится (точнее, каждый индикатор независимо это делает по tcp/ip).&lt;br /&gt;&lt;br /&gt;А может кто бесплатный профайлер указать, который бы мог мну помочь?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29758/</id>
    <title type="text">Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из б...</title>
    <published>2014-02-22T20:10:13Z</published>
    <updated>2014-02-22T20:11:30Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.ru/users/50604/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из базы тики и налету формирует свечки. При этом память жрется дико, так что если прогонять несколько стратегий последовательно - может память и утекает на копии одного дня тиков на разные стратегии&lt;br /&gt;&lt;br /&gt;Как заставить S# смотреть сразу свечки я не нашел, это вообще можно сделать?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29757/</id>
    <title type="text">Доброго времени суток! Здесь, соответственно, всё почти что стандартно, как в примерах. Но память те...</title>
    <published>2014-02-22T17:33:26Z</published>
    <updated>2014-02-22T17:33:26Z</updated>
    <author>
      <name>Bond</name>
      <uri>https://stocksharp.ru/users/26882/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Доброго времени суток!&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Хардкор. На тиках тестируете?&lt;br /&gt;&lt;br /&gt;Можно еще strategy = null, trader = null обнулять, но выше указанных операций должно хватить с головой. Вряд ли поможет.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Если многопоточное тестирование, то имеет. А так вроде не принципиально.&lt;br /&gt;&lt;br /&gt;Мне кажется, что у вас с кодом что-то не так. Даже на S# тестере у меня не было таких утечек. Хотя, если тики, то может быть...&lt;br /&gt;Потому что, на сколько я помню, когда тестируешь на свечках после использования свечка уничтожается, чтобы не есть память.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>