﻿<?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">Ошибка System.OutOfMemoryException в NDde.dll</title>
  <id>~/topic/2894/oshibka-system_outofmemoryexception-v-ndde_dll/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-17T22:35:54Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=2894" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/20578/</id>
    <title type="text">Регулярно использую candleManager, никогда проблем с утечками не было. У вас значит что-то в коде не...</title>
    <published>2012-07-27T13:39:34Z</published>
    <updated>2012-07-27T13:39:34Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Регулярно использую candleManager, никогда проблем с утечками не было.
У вас значит что-то в коде не то.&lt;/p&gt;
&lt;p&gt;Поставьте профайлер памяти да посмотрите где память утекает от вас. К примеру профайлер от JetBrains.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20576/</id>
    <title type="text">Ограничил количество инструментов в таблице всех сделок - только RIU2. Еще урезал проект - оставил т...</title>
    <published>2012-07-27T12:54:15Z</published>
    <updated>2012-07-27T12:54:47Z</updated>
    <author>
      <name>Серёжа Сорокин</name>
      <uri>https://stocksharp.com/users/212/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Ограничил количество инструментов в таблице всех сделок - только RIU2. Еще урезал проект - оставил только трейдера и CandleManager, который строит часовые свечки по RIU2.
Последний запуск программы в
&lt;strong&gt;15:14, в диспетчере она занимала 234600 Кб,&lt;/strong&gt; при этом в _trader.Trades было довольно много сделок - &lt;strong&gt;337 899 штук.&lt;/strong&gt;
Но размер продолжает расти! В
&lt;strong&gt;15:27, памяти 705 068 Кб, сделок 344 658.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;То есть &lt;strong&gt;не из-за количества сделок растет размер&lt;/strong&gt;. И еще раз говорю - моих переменных, кроме CandleManager, никаких нету, накапливающих данные.&lt;/p&gt;
&lt;p&gt;После этого прямо на глазах потребляемая память растет примерно на 9МБ в секунду. И еще через три минуты становится около 1.3Гб, расти перестает на минуту. Потом вываливается ошибка, описанная в первом посте.&lt;/p&gt;
&lt;p&gt;У проекта удалил вообще все, кроме трейдера и кендл менеджера. Вот проект: &lt;a href="https://dl.dropbox.com/u/59802690/AllStrategies_4.1_%D0%B4%D0%BB%D1%8F%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8_2012_07_27.rar" rel="nofollow" target="_blank"&gt;https://dl.dropbox.com/u/59802690/AllStrategies_4.1_%D0%B4%D0%BB%D1%8F%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8_2012_07_27.rar&lt;/a&gt;&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/20540/</id>
    <title type="text">Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда...</title>
    <published>2012-07-26T05:08:58Z</published>
    <updated>2012-07-26T05:13:43Z</updated>
    <author>
      <name>Серёжа Сорокин</name>
      <uri>https://stocksharp.com/users/212/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда свечка полностью сформировалась.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;А я хочу формировать сигналы внутри свечки. За час может многое произойти и хочу оперативно реагировать на это.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Каждый раз, когда срабатывает событие Processing, беря все свечки по серии
Код:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;seria.GetCandles&amp;lt;Candle&amp;gt;()&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;вы таким образом убиваете скорость работы робота.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Я знаю. Просто при первом срабатывании этого события thisCandle уже приходит непервая. Вот чтобы ее не пропустить. Да и разница в производительностью между выборкой всех свечек серии и отбором среди них одной последней (по времени) и просто последней несущественна, если у меня часовки. Их всего 30-40 штук.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Сегодня попробую запустить сначала с обновлением индикаторов раз в час. Потом с более строгим отбором всех сделок в квике. Посмотрим, что получится.&lt;/strong&gt; [smile]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20535/</id>
    <title type="text">Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда...</title>
    <published>2012-07-25T20:22:43Z</published>
    <updated>2012-07-25T20:22:43Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда свечка полностью сформировалась.&lt;/p&gt;
&lt;p&gt;Каждый раз, когда срабатывает событие &lt;strong&gt;Processing&lt;/strong&gt;, беря все свечки по серии&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
seria.GetCandles&amp;lt;Candle&amp;gt;()

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;вы таким образом убиваете скорость работы робота.&lt;/p&gt;
&lt;p&gt;Последняя свечка и так передается в обработчик - thisCandle.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20534/</id>
    <title type="text">Для Квика фильтр не работает. Все что льет Квик, то и приходит. И копится? Просто я не создавал спец...</title>
    <published>2012-07-25T20:16:44Z</published>
    <updated>2012-07-25T20:16:44Z</updated>
    <author>
      <name>Серёжа Сорокин</name>
      <uri>https://stocksharp.com/users/212/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Для Квика фильтр не работает. Все что льет Квик, то и приходит.
И копится? Просто я не создавал специальных переменных, значит это в самой библиотеке? А очистить можно - например, трейдер обнулить?&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20533/</id>
    <title type="text">Серёжа Сорокин: В терминале стоит фильтр &amp;quot;все фьючерсы&amp;quot;. Но ведь в коде я только один раз подписываю...</title>
    <published>2012-07-25T20:06:30Z</published>
    <updated>2012-07-25T20:06:30Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(20529)" rel="nofollow" target="_blank"&gt;Серёжа Сорокин&lt;/a&gt;:&lt;/strong&gt;
В терминале стоит фильтр &amp;quot;все фьючерсы&amp;quot;. Но ведь в коде я только один раз подписываюсь на тики по инструменту RIU2:&lt;/p&gt;
&lt;/blockquote&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/20529/</id>
    <title type="text">Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может пробл...</title>
    <published>2012-07-25T19:22:17Z</published>
    <updated>2012-07-25T19:22:17Z</updated>
    <author>
      <name>Серёжа Сорокин</name>
      <uri>https://stocksharp.com/users/212/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может проблема в тиках? Фильтр на этой таблице стоит?
В терминале стоит фильтр &amp;quot;все фьючерсы&amp;quot;. Но ведь в коде я только один раз подписываюсь на тики по инструменту RIU2: ```csharp
_trader.RegisterMarketDepth(sec);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;Разве может быть в тиках?

&amp;gt; Оптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много.
Так у меня там всего 4 индикатора и один candleManager из переменных, которые именно накапливают данные. Это точно не где-то в переменных самой библиотеки копится?

В алгоритме я использую подписку на изменение свечки:
```csharp
_candleManager.Processing -= (seria, candle) =&amp;gt; CandlesChanged(seria, candle);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Это событие срабатывает очень часто - несколько раз в секунду. А внутри него:
```csharp
private void CandlesChanged(CandleSeries seria, Candle thisCandle)
{
foreach (var candle in seria.GetCandles&amp;lt;Candle&amp;gt;().Where(candle =&amp;gt; _lastCandle == null || candle.OpenTime &amp;gt;= _lastCandle.OpenTime))
{
sar.Process((CandleIndicatorValue)candle);
adx.Process((CandleIndicatorValue)candle);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;            if (_lastCandle != null &amp;amp;&amp;amp; candle.OpenTime &amp;gt; _lastCandle.OpenTime)
            {
                lastAdx = adx.MovingAverage.LastValue;
                _lastCandle = candle;
                this.AddInfoLog(&amp;quot;Перешли на следующую свечку со временем открытия {0}.&amp;quot;, _lastCandle.OpenTime);

                sma3.Process((DecimalIndicatorValue)candle.ClosePrice);
                sma12.Process((DecimalIndicatorValue)candle.ClosePrice);
            }
            if (candle.OpenTime != _timeFrame.GetCandleBounds(Trader.MarketTime, Security.Exchange).Min &amp;amp;&amp;amp; !Allloaded)
                continue;
            if (_candleManager.Container.GetCandles(_candleManager.Series.First()).Count() &amp;lt; 18)
                continue;
            
            Allloaded = true;
            var order = AlterantiveSignal(candle, _candleManager);
            if (AlterantiveSignal == null || order == null) return;
            var child = new MarketQuotingStrategy(order, Security.MinStepPrice, lastMarketDepth.BestPair.SpreadPrice);
            ChildStrategies.Add(child);
            currentQuoting = child;
            child.Start();
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;То есть из серии выбирается последняя свечка (условие Where), по ней несколько раз в секунду срабатывает Process у индикаторов. Но я смотрел исходный код индикаторов (adx смотрел). Ведь если время свечки то же, что у прошлой добавленной, то они просто обновляются, они не копят в себе слишком большой буфер? Или все-таки накапливают?
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20526/</id>
    <title type="text">Оптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много. </title>
    <published>2012-07-25T18:50:50Z</published>
    <updated>2012-07-25T18:50:50Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Оптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20525/</id>
    <title type="text">Серёжа Сорокин: На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlS...</title>
    <published>2012-07-25T18:49:10Z</published>
    <updated>2012-07-25T18:49:10Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(20522)" rel="nofollow" target="_blank"&gt;Серёжа Сорокин&lt;/a&gt;:&lt;/strong&gt;
На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlServer.ProcessCallBack().&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может проблема в тиках? Фильтр на этой таблице стоит?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20522/</id>
    <title type="text">Использую 4.1.3, скачанный из репозитория с номером 18403. Программа компилируется и нормально работ...</title>
    <published>2012-07-25T18:24:58Z</published>
    <updated>2012-07-25T18:28:07Z</updated>
    <author>
      <name>Серёжа Сорокин</name>
      <uri>https://stocksharp.com/users/212/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Использую 4.1.3, скачанный из репозитория с номером 18403. Программа компилируется и нормально работает около часа. При запуске занимает память около 400Мб, но через час вываливается эта ошибка. Программа уже использует 1.3-1.5Гб (по диспетчеру задач смотрю). Пишет &amp;quot;нет исходных файлов для отладки&amp;quot;, значит это в защищенной длл. Скриншоты прикрепляю и проект, на котором ошибка выскакивает, тоже. Стратегия простая на часовых свечках. При работе подписывается на стакан и на свечки (candleManager) по одному инструменту RIU2. Если будете запускать, то она там перед работой качает с финама исторические данные в каталог d:\historyC#_60. Если мешает, то, наверное, этот участок можно закомментировать.&lt;/p&gt;
&lt;p&gt;На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlServer.ProcessCallBack().&lt;/p&gt;
&lt;p&gt;Возможно, баг, а, возможно, я неправильно понимаю логику S#. Посмотрите, пожалуйста, в чем тут может быть причина?&lt;/p&gt;
&lt;p&gt;Проект, на котором через час вываливается ошибка: &lt;a href="https://dl.dropbox.com/u/59802690/AllStrategies_4.1_%D0%B4%D0%BB%D1%8F%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8.rar" rel="nofollow" target="_blank"&gt;https://dl.dropbox.com/u/59802690/AllStrategies_4.1_%D0%B4%D0%BB%D1%8F%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8.rar&lt;/a&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>