Ошибка System.OutOfMemoryException в NDde.dll~/topic/2894/oshibka-system_outofmemoryexception-v-ndde_dll/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-19T08:58:28Zhttps://stocksharp.com/images/logo.pnghttps://stocksharp.com/posts/m/20578/Регулярно использую candleManager, никогда проблем с утечками не было. У вас значит что-то в коде не...2012-07-27T13:39:34Z2012-07-27T13:39:34ZAlexanderhttps://stocksharp.com/users/2826/info@stocksharp.comРегулярно использую candleManager, никогда проблем с утечками не было.<br />У вас значит что-то в коде не то.<br /><br />Поставьте профайлер памяти да посмотрите где память утекает от вас. К примеру профайлер от JetBrains.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20576/Ограничил количество инструментов в таблице всех сделок - только RIU2. Еще урезал проект - оставил т...2012-07-27T12:54:15Z2012-07-27T12:54:47ZСерёжа Сорокинhttps://stocksharp.com/users/212/info@stocksharp.comОграничил количество инструментов в таблице всех сделок - только RIU2. Еще урезал проект - оставил только трейдера и CandleManager, который строит часовые свечки по RIU2.<br />Последний запуск программы в <br /><b>15:14, в диспетчере она занимала 234600 Кб,</b> при этом в _trader.Trades было довольно много сделок - <b>337 899 штук.</b><br />Но размер продолжает расти! В<br /><b>15:27, памяти 705 068 Кб, сделок 344 658.</b><br /><br />То есть <b>не из-за количества сделок растет размер</b>. И еще раз говорю - моих переменных, кроме CandleManager, никаких нету, накапливающих данные.<br /><br />После этого прямо на глазах потребляемая память растет примерно на 9МБ в секунду. И еще через три минуты становится около 1.3Гб, расти перестает на минуту. Потом вываливается ошибка, описанная в первом посте.<br /><br />У проекта удалил вообще все, кроме трейдера и кендл менеджера. Вот проект: <a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAABZi6aGiRBsiReXaSBqb4iH6daFvurWL6yDLyBGqePqdHWm5xVi7DnG_phtSuNQbWyj8GIwpG6Ufh0Z9scuoAfY5UaHSi2l_OoUom4GwvYnrn3G7yN1uXeLVn6-SSFf2COXmwlpWzN-g4QBsxSrOZXpEYhFSI5jxzngBSmgsXfbMRqwuOWWNguX52MOq258sNQ" title="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
">https://dl.dropbox.com/u...BA%D0%B8_2012_07_27.rar
</a><br /><br />Я практически уверен, что где-то утечка памяти. Подскажите, пожалуйста, как вычислить эту ошибку?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20540/Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда...2012-07-26T05:08:58Z2012-07-26T05:13:43ZСерёжа Сорокинhttps://stocksharp.com/users/212/info@stocksharp.com<div class="quote"><span class="quotetitle">Quote:</span><div class="innerquote">Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда свечка полностью сформировалась.</div></div><br /><br />А я хочу формировать сигналы внутри свечки. За час может многое произойти и хочу оперативно реагировать на это.<br /><br /><div class="quote"><span class="quotetitle">Quote:</span><div class="innerquote">Каждый раз, когда срабатывает событие Processing, беря все свечки по серии<br />Код:<br /><br /><br /><div class="quote"><span class="quotetitle">Quote:</span><div class="innerquote">seria.GetCandles<Candle>()</div></div><br /><br /><br />вы таким образом убиваете скорость работы робота.</div></div><br /><br />Я знаю. Просто при первом срабатывании этого события thisCandle уже приходит непервая. Вот чтобы ее не пропустить. Да и разница в производительностью между выборкой всех свечек серии и отбором среди них одной последней (по времени) и просто последней несущественна, если у меня часовки. Их всего 30-40 штук.<br /><br /><b>Сегодня попробую запустить сначала с обновлением индикаторов раз в час. Потом с более строгим отбором всех сделок в квике. Посмотрим, что получится.</b> [smile]Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20535/Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда...2012-07-25T20:22:43Z2012-07-25T20:22:43ZMoadiphttps://stocksharp.com/users/5973/info@stocksharp.comЗачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда свечка полностью сформировалась.<br /><br />Каждый раз, когда срабатывает событие <b>Processing</b>, беря все свечки по серии <br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
seria.GetCandles<Candle>()
</pre>
</div></div><br />вы таким образом убиваете скорость работы робота.<br /><br />Последняя свечка и так передается в обработчик - thisCandle.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20534/Для Квика фильтр не работает. Все что льет Квик, то и приходит. И копится? Просто я не создавал спец...2012-07-25T20:16:44Z2012-07-25T20:16:44ZСерёжа Сорокинhttps://stocksharp.com/users/212/info@stocksharp.com<div class="quote"><span class="quotetitle">Quote:</span><div class="innerquote">Для Квика фильтр не работает. Все что льет Квик, то и приходит. </div></div><br />И копится? Просто я не создавал специальных переменных, значит это в самой библиотеке? А очистить можно - например, трейдер обнулить?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20533/ В терминале стоит фильтр "все фьючерсы". Но ведь в коде я только один раз подписываюсь на тики по и...2012-07-25T20:06:30Z2012-07-25T20:06:30ZMikhail Sukhovhttps://stocksharp.com/users/201/info@stocksharp.com<div class="quote"><span class="quotetitle">Серёжа Сорокин <a href="https://stocksharp.com/posts/m/20529/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote"><br />В терминале стоит фильтр "все фьючерсы". Но ведь в коде я только один раз подписываюсь на тики по инструменту RIU2: </div></div><br /><br />Для Квика фильтр не работает. Все что льет Квик, то и приходит.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20529/ Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может проб...2012-07-25T19:22:17Z2012-07-25T19:22:17ZСерёжа Сорокинhttps://stocksharp.com/users/212/info@stocksharp.com<div class="quote"><span class="quotetitle">Quote:</span><div class="innerquote"><br />Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может проблема в тиках? Фильтр на этой таблице стоит? </div></div><br />В терминале стоит фильтр "все фьючерсы". Но ведь в коде я только один раз подписываюсь на тики по инструменту RIU2: <div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
_trader.RegisterMarketDepth(sec);</pre>
</div></div><br />Разве может быть в тиках?<br /><br /><div class="quote"><span class="quotetitle">Quote:</span><div class="innerquote">Оптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много. </div></div><br />Так у меня там всего 4 индикатора и один candleManager из переменных, которые именно накапливают данные. Это точно не где-то в переменных самой библиотеки копится?<br /><br />В алгоритме я использую подписку на изменение свечки:<br /><div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
_candleManager.Processing -= (seria, candle) => CandlesChanged(seria, candle);</pre>
</div></div><br />Это событие срабатывает очень часто - несколько раз в секунду. А внутри него:<br /> <div class="code"><strong>Code</strong><div class="innercode"><pre class="brush:csharp">
private void CandlesChanged(CandleSeries seria, Candle thisCandle)
{
foreach (var candle in seria.GetCandles<Candle>().Where(candle => _lastCandle == null || candle.OpenTime >= _lastCandle.OpenTime))
{
sar.Process((CandleIndicatorValue)candle);
adx.Process((CandleIndicatorValue)candle);
if (_lastCandle != null && candle.OpenTime > _lastCandle.OpenTime)
{
lastAdx = adx.MovingAverage.LastValue;
_lastCandle = candle;
this.AddInfoLog("Перешли на следующую свечку со временем открытия {0}.", _lastCandle.OpenTime);
sma3.Process((DecimalIndicatorValue)candle.ClosePrice);
sma12.Process((DecimalIndicatorValue)candle.ClosePrice);
}
if (candle.OpenTime != _timeFrame.GetCandleBounds(Trader.MarketTime, Security.Exchange).Min && !Allloaded)
continue;
if (_candleManager.Container.GetCandles(_candleManager.Series.First()).Count() < 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();
}
}</pre>
</div></div><br />То есть из серии выбирается последняя свечка (условие Where), по ней несколько раз в секунду срабатывает Process у индикаторов. Но я смотрел исходный код индикаторов (adx смотрел). Ведь если время свечки то же, что у прошлой добавленной, то они просто обновляются, они не копят в себе слишком большой буфер? Или все-таки накапливают?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20526/Оптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много.2012-07-25T18:50:50Z2012-07-25T18:50:50ZAlexanderhttps://stocksharp.com/users/2826/info@stocksharp.comОптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20525/ На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlServer.ProcessCa...2012-07-25T18:49:10Z2012-07-25T18:49:10ZMikhail Sukhovhttps://stocksharp.com/users/201/info@stocksharp.com<div class="quote"><span class="quotetitle">Серёжа Сорокин <a href="https://stocksharp.com/posts/m/20522/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote"><br />На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlServer.ProcessCallBack().<br /></div></div><br /><br />Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может проблема в тиках? Фильтр на этой таблице стоит?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/20522/Использую 4.1.3, скачанный из репозитория с номером 18403. Программа компилируется и нормально работ...2012-07-25T18:24:58Z2012-07-25T18:28:07ZСерёжа Сорокинhttps://stocksharp.com/users/212/info@stocksharp.comИспользую 4.1.3, скачанный из репозитория с номером 18403. Программа компилируется и нормально работает около часа. При запуске занимает память около 400Мб, но через час вываливается эта ошибка. Программа уже использует 1.3-1.5Гб (по диспетчеру задач смотрю). Пишет "нет исходных файлов для отладки", значит это в защищенной длл. Скриншоты прикрепляю и проект, на котором ошибка выскакивает, тоже. Стратегия простая на часовых свечках. При работе подписывается на стакан и на свечки (candleManager) по одному инструменту RIU2. Если будете запускать, то она там перед работой качает с финама исторические данные в каталог d:\historyC#_60. Если мешает, то, наверное, этот участок можно закомментировать.<br /><br />На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlServer.ProcessCallBack().<br /><br />Возможно, баг, а, возможно, я неправильно понимаю логику S#. Посмотрите, пожалуйста, в чем тут может быть причина?<br /><br />Проект, на котором через час вываливается ошибка: <a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAABZi6aGiRBsiReXaSBqb4iH6daFvurWL6yDLyBGqePqdHWm5xVi7DnG_phtSuNQbWyj8GIwpG6Ufh0Z9scuoAfY5UaHSi2l_OoUom4GwvYnrn3G7yN1uXeLVn6-SSFf2COXmwlpWzN-g4QBsxSrOZXpe86tKobPODS74VcmOJNkVg" title="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">https://dl.dropbox.com/u...B0%D0%B2%D0%BA%D0%B8.rar</a>Copyright @ StockSharp Platform LLC 2010 - 2024