Использую 4.1.3, скачанный из репозитория с номером 18403. Программа компилируется и нормально работает около часа. При запуске занимает память около 400Мб, но через час вываливается эта ошибка. Программа уже использует 1.3-1.5Гб (по диспетчеру задач смотрю). Пишет "нет исходных файлов для отладки", значит это в защищенной длл. Скриншоты прикрепляю и проект, на котором ошибка выскакивает, тоже. Стратегия простая на часовых свечках. При работе подписывается на стакан и на свечки (candleManager) по одному инструменту RIU2. Если будете запускать, то она там перед работой качает с финама исторические данные в каталог d:\historyC#_60. Если мешает, то, наверное, этот участок можно закомментировать.
На скриншотах можно увидеть, что ошибка вываливается в NDde.Foundation.Server.DdemlServer.ProcessCallBack().
Возможно, баг, а, возможно, я неправильно понимаю логику S#. Посмотрите, пожалуйста, в чем тут может быть причина?
Проект, на котором через час вываливается ошибка: 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
Comentários (9)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Когда не хватает памяти, то упасть может где угодно, где выделяется память. Хоть 1 байт. Может проблема в тиках? Фильтр на этой таблице стоит?
Оптимизируйте приложение по памяти, 1.5 гига - как-то мягко говоря много.
Это событие срабатывает очень часто - несколько раз в секунду. А внутри него: ```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);
Для Квика фильтр не работает. Все что льет Квик, то и приходит.
Зачем с приходом каждого нового тика делать расчет индикатора? Вроде как логично делать расчет когда свечка полностью сформировалась.
Каждый раз, когда срабатывает событие Processing, беря все свечки по серии
вы таким образом убиваете скорость работы робота.
Последняя свечка и так передается в обработчик - thisCandle.
А я хочу формировать сигналы внутри свечки. За час может многое произойти и хочу оперативно реагировать на это.
Я знаю. Просто при первом срабатывании этого события thisCandle уже приходит непервая. Вот чтобы ее не пропустить. Да и разница в производительностью между выборкой всех свечек серии и отбором среди них одной последней (по времени) и просто последней несущественна, если у меня часовки. Их всего 30-40 штук.
Сегодня попробую запустить сначала с обновлением индикаторов раз в час. Потом с более строгим отбором всех сделок в квике. Посмотрим, что получится. 🙂
Ограничил количество инструментов в таблице всех сделок - только RIU2. Еще урезал проект - оставил только трейдера и CandleManager, который строит часовые свечки по RIU2. Последний запуск программы в 15:14, в диспетчере она занимала 234600 Кб, при этом в _trader.Trades было довольно много сделок - 337 899 штук. Но размер продолжает расти! В 15:27, памяти 705 068 Кб, сделок 344 658.
То есть не из-за количества сделок растет размер. И еще раз говорю - моих переменных, кроме CandleManager, никаких нету, накапливающих данные.
После этого прямо на глазах потребляемая память растет примерно на 9МБ в секунду. И еще через три минуты становится около 1.3Гб, расти перестает на минуту. Потом вываливается ошибка, описанная в первом посте.
У проекта удалил вообще все, кроме трейдера и кендл менеджера. Вот проект: 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
Я практически уверен, что где-то утечка памяти. Подскажите, пожалуйста, как вычислить эту ошибку?
Регулярно использую candleManager, никогда проблем с утечками не было. У вас значит что-то в коде не то.
Поставьте профайлер памяти да посмотрите где память утекает от вас. К примеру профайлер от JetBrains.