﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/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-06-20T21:16:22Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=4379" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/29762/</id>
    <title type="text">Rebelion: Ночи доброй всем. Собственно, интересует вопрос относительно 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.com/users/6247/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(29751)" rel="nofollow" target="_blank"&gt;Rebelion&lt;/a&gt;:&lt;/strong&gt;
Ночи доброй всем.&lt;/p&gt;
&lt;p&gt;Собственно, интересует вопрос относительно memory leak'ов и корректного удаления объектов. Версия 4.2.2.6 (забыл указать сразу вначале).&lt;/p&gt;
&lt;p&gt;Сейчас имею следующий код:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;                                        strategy.CancelActiveOrders();
                                        strategy.ChildStrategies.DisposeAll();
                                        strategy.DoDispose();

                                        trader.Disconnect();

                                        candleManager.Series.DoDispose();
                                        candleManager.DoDispose();

                                        series.DoDispose();

                                        basketTrader.InnerConnectors.Remove(trader);
                                        trader.DoDispose();
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;gt; 
&amp;gt; Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.
&amp;gt; 
&amp;gt; За сим, собственно, вопрос - какая стратегия очистки данных должна быть реализована? Помню, вопрос про утечки памяти поднимался ранее, но вроде же всё пофиксили?
&amp;gt; 
&amp;gt; Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?
&amp;gt; 
&amp;gt; 
&amp;gt; P.S. Подскажите, плз, какой-нибудь адекватный бесплатный профайлер для .NET.


Добрый день!

Некоторое время назад столкнулся с аналогичной проблемой &amp;lt;http://stocksharp.com/forum/4304/LinkedListNode----kak-unichtozhit--obiekt/&amp;gt;

Метод Dispose не помогал, поэтому я подумал и решил что раз избавиться от объемного объекта не получается, то нужно создать вместо него новый, но пустой и соответственно маленький

Сделал я следующее

```csharp
									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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ключевой элемент:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;candleManager.Container = new CandleManagerContainer();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Не буду утверждать что я смог таким образом устранить утечку, но память начала освобождаться.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/26936/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Rebelion,сними снимок памяти и посмотри...но по моим наблюдениям не много она жрет, по крайнее мере терпимо, а вот что действительно разростается, так это всевозможные коллекции с обьектом trade...они и жрут память...у самого такая же фигня как у вас, правда до 16 гигов не доходило никогда, максимум 1-1,5 при торговле...на втором месте transaction и на третьем orders...остальное все не существенно...&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Да, ещё такой вопросинг - а сколько жрёт график PnL'я? Просто я отрисовываю для каждого прогона PnL, чтобы посмотреть распределение относительно 0 профита/лосса. Может, из-за этого память забивается? Сегодня попробую налабать тестер без визуализации - посмотрим на скорость и мемори лики, о результатах сообщу.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29761/</id>
    <title type="text">Rebelion: Да, и ещё вопрос - как убрать в 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.com/users/27996/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(29760)" rel="nofollow" target="_blank"&gt;Rebelion&lt;/a&gt;:&lt;/strong&gt;
Да, и ещё вопрос - как убрать в CandleManager'е временные отрезки, в которых не нужно генерировать ничего? Т.е. чтобы у меня CandleManager шпарил данные только с 10:00 до 18:50? Можно кусочек кода маленький? Плз!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;думаю где-то здесь собака зарыта, CandleSeries.WorkingTime
но не проверял, догадка&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Доброго времени суток!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.
Хардкор. На тиках тестируете?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Можно еще strategy = null, trader = null обнулять, но выше указанных операций должно хватить с головой. Вряд ли поможет.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?
Если многопоточное тестирование, то имеет. А так вроде не принципиально.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Мне кажется, что у вас с кодом что-то не так. Даже на S# тестере у меня не было таких утечек. Хотя, если тики, то может быть...
Потому что, на сколько я помню, когда тестируешь на свечках после использования свечка уничтожается, чтобы не есть память.&lt;/p&gt;
&lt;p&gt;Не совсем. Тесты идут на RenkoCandle, которые из тихов формируются. В стаканогенераторе квант обновления - 15 миллисекунд.
Да, тестирование именно многопоточное (Монте-Карло гоняю) с синхронизацией через SemaphoreSlim.
strategy = null, trader = null - эффекта ноль. Т.е. память всё же где-то накапливается, что странно, конечно, т.к. нигде навроде привязок внешних объектов ни к стратегии, ни к трейдеру навроде не идёт, чтобы они могли зависнуть на неопределённо долгий срок и не мочь быть собранными сборщиком мусора.&lt;/p&gt;
&lt;p&gt;Сейчас попробую 4.2.2.15, до этого тесты были на 4.2.2.6&lt;/p&gt;
&lt;p&gt;Собственно, и хочу разобраться, что к чему - хочу понять стратегию удаления объектов, связанных со стратегией и трейдером. Потому как скорее всего проблемы именно у меня.
Опять же, оффтоп, - порекомендуйте нормальный халявный профайлер для .NET, чтобы не шаровварный был.&lt;/p&gt;
&lt;p&gt;Да, и ещё вопрос - как убрать в CandleManager'е временные отрезки, в которых не нужно генерировать ничего? Т.е. чтобы у меня CandleManager шпарил данные только с 10:00 до 18:50? Можно кусочек кода маленький? Плз!&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Ночи доброй всем.&lt;/p&gt;
&lt;p&gt;Собственно, интересует вопрос относительно memory leak'ов и корректного удаления объектов. Версия 4.2.2.6 (забыл указать сразу вначале).&lt;/p&gt;
&lt;p&gt;Сейчас имею следующий код:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.&lt;/p&gt;
&lt;p&gt;За сим, собственно, вопрос - какая стратегия очистки данных должна быть реализована? Помню, вопрос про утечки памяти поднимался ранее, но вроде же всё пофиксили?&lt;/p&gt;
&lt;p&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?&lt;/p&gt;
&lt;p&gt;P.S. Подскажите, плз, какой-нибудь адекватный бесплатный профайлер для .NET.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29759/</id>
    <title type="text">devruss: Я заметил, что несмотря на то, что я ставлю 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.com/users/28840/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(29758)" rel="nofollow" target="_blank"&gt;devruss&lt;/a&gt;:&lt;/strong&gt;
Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из базы тики и налету формирует свечки. При этом память жрется дико, так что если прогонять несколько стратегий последовательно - может память и утекает на копии одного дня тиков на разные стратегии&lt;/p&gt;
&lt;p&gt;Как заставить S# смотреть сразу свечки я не нашел, это вообще можно сделать?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Насчёт этого не знаю, если честно, - тут нужно на курсы идти.
Насчёт отжирания оперативы - я просто после каждого прогона чищу за собой, но постепенно память утекает. Т.е. первые 10 нитей отрабатыают на 6-8 гб, потом постепенно на 20-30 нитях дорастает до 11-12 гб, дальше уже начинается тупняк. Я просто пулами по 10-15 нитей запускаю, каждая нить у меня к моему планировщику вызовов к R коннектится (точнее, каждый индикатор независимо это делает по tcp/ip).&lt;/p&gt;
&lt;p&gt;А может кто бесплатный профайлер указать, который бы мог мну помочь?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/50604/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из базы тики и налету формирует свечки. При этом память жрется дико, так что если прогонять несколько стратегий последовательно - может память и утекает на копии одного дня тиков на разные стратегии&lt;/p&gt;
&lt;p&gt;Как заставить S# смотреть сразу свечки я не нашел, это вообще можно сделать?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/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.com/users/26882/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Доброго времени суток!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов.
Хардкор. На тиках тестируете?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Можно еще strategy = null, trader = null обнулять, но выше указанных операций должно хватить с головой. Вряд ли поможет.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series?
Если многопоточное тестирование, то имеет. А так вроде не принципиально.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Мне кажется, что у вас с кодом что-то не так. Даже на S# тестере у меня не было таких утечек. Хотя, если тики, то может быть...
Потому что, на сколько я помню, когда тестируешь на свечках после использования свечка уничтожается, чтобы не есть память.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>