Bond
|
Дата: 22.02.2014
Доброго времени суток! Цитата:Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов. Хардкор. На тиках тестируете? Можно еще strategy = null, trader = null обнулять, но выше указанных операций должно хватить с головой. Вряд ли поможет. Цитата:Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series? Если многопоточное тестирование, то имеет. А так вроде не принципиально. Мне кажется, что у вас с кодом что-то не так. Даже на S# тестере у меня не было таких утечек. Хотя, если тики, то может быть... Потому что, на сколько я помню, когда тестируешь на свечках после использования свечка уничтожается, чтобы не есть память.
|
|
Спасибо:
|
|
|
|
|
devruss
|
Дата: 23.02.2014
Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из базы тики и налету формирует свечки. При этом память жрется дико, так что если прогонять несколько стратегий последовательно - может память и утекает на копии одного дня тиков на разные стратегии
Как заставить S# смотреть сразу свечки я не нашел, это вообще можно сделать?
|
|
Спасибо:
|
|
|
|
|
Rebelion
|
Дата: 23.02.2014
devruss Я заметил, что несмотря на то, что я ставлю UseCandlesTimeFrame = timeFrame, S# все равно тянет из базы тики и налету формирует свечки. При этом память жрется дико, так что если прогонять несколько стратегий последовательно - может память и утекает на копии одного дня тиков на разные стратегии
Как заставить S# смотреть сразу свечки я не нашел, это вообще можно сделать? Насчёт этого не знаю, если честно, - тут нужно на курсы идти. Насчёт отжирания оперативы - я просто после каждого прогона чищу за собой, но постепенно память утекает. Т.е. первые 10 нитей отрабатыают на 6-8 гб, потом постепенно на 20-30 нитях дорастает до 11-12 гб, дальше уже начинается тупняк. Я просто пулами по 10-15 нитей запускаю, каждая нить у меня к моему планировщику вызовов к R коннектится (точнее, каждый индикатор независимо это делает по tcp/ip). А может кто бесплатный профайлер указать, который бы мог мну помочь?
|
|
Спасибо:
|
|
|
|
|
Rebelion
|
Дата: 23.02.2014
|
|
|
|
Bond Доброго времени суток! Цитата:Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов. Хардкор. На тиках тестируете? Можно еще strategy = null, trader = null обнулять, но выше указанных операций должно хватить с головой. Вряд ли поможет. Цитата:Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series? Если многопоточное тестирование, то имеет. А так вроде не принципиально. Мне кажется, что у вас с кодом что-то не так. Даже на S# тестере у меня не было таких утечек. Хотя, если тики, то может быть... Потому что, на сколько я помню, когда тестируешь на свечках после использования свечка уничтожается, чтобы не есть память. Не совсем. Тесты идут на RenkoCandle, которые из тихов формируются. В стаканогенераторе квант обновления - 15 миллисекунд. Да, тестирование именно многопоточное (Монте-Карло гоняю) с синхронизацией через SemaphoreSlim. strategy = null, trader = null - эффекта ноль. Т.е. память всё же где-то накапливается, что странно, конечно, т.к. нигде навроде привязок внешних объектов ни к стратегии, ни к трейдеру навроде не идёт, чтобы они могли зависнуть на неопределённо долгий срок и не мочь быть собранными сборщиком мусора. Сейчас попробую 4.2.2.15, до этого тесты были на 4.2.2.6 Собственно, и хочу разобраться, что к чему - хочу понять стратегию удаления объектов, связанных со стратегией и трейдером. Потому как скорее всего проблемы именно у меня. Опять же, оффтоп, - порекомендуйте нормальный халявный профайлер для .NET, чтобы не шаровварный был. Да, и ещё вопрос - как убрать в CandleManager'е временные отрезки, в которых не нужно генерировать ничего? Т.е. чтобы у меня CandleManager шпарил данные только с 10:00 до 18:50? Можно кусочек кода маленький? Плз!
|
|
Спасибо:
|
|
|
|
|
Andrii
|
Дата: 23.02.2014
Rebelion Да, и ещё вопрос - как убрать в CandleManager'е временные отрезки, в которых не нужно генерировать ничего? Т.е. чтобы у меня CandleManager шпарил данные только с 10:00 до 18:50? Можно кусочек кода маленький? Плз!
думаю где-то здесь собака зарыта, CandleSeries.WorkingTime но не проверял, догадка
|
|
Спасибо:
|
|
|
|
|
AntonySS
|
Дата: 23.02.2014
|
|
|
|
Rebelion Ночи доброй всем. Собственно, интересует вопрос относительно memory leak'ов и корректного удаления объектов. Версия 4.2.2.6 (забыл указать сразу вначале). Сейчас имею следующий код: Код
strategy.CancelActiveOrders();
strategy.ChildStrategies.DisposeAll();
strategy.DoDispose();
trader.Disconnect();
candleManager.Series.DoDispose();
candleManager.DoDispose();
series.DoDispose();
basketTrader.InnerConnectors.Remove(trader);
trader.DoDispose();
Здесь, соответственно, всё почти что стандартно, как в примерах. Но память течёт, и течёт неслабо так - за 30-40 прогонов забирает почти 16 гигов оперативы (тестирую на 4-х днях по RiH4, данные тащу из базы Гидры). Использую эмулятор торгов. За сим, собственно, вопрос - какая стратегия очистки данных должна быть реализована? Помню, вопрос про утечки памяти поднимался ранее, но вроде же всё пофиксили? Оффтоп вопрос - имеет ли смысл не пересоздавать каждый раз CandleManager и Series? P.S. Подскажите, плз, какой-нибудь адекватный бесплатный профайлер для .NET. Добрый день! Некоторое время назад столкнулся с аналогичной проблемой http://stocksharp.com/forum/430...kak-unichtozhit--obiekt/Метод Dispose не помогал, поэтому я подумал и решил что раз избавиться от объемного объекта не получается, то нужно создать вместо него новый, но пустой и соответственно маленький Сделал я следующее Код
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;
Ключевой элемент: Код
candleManager.Container = new CandleManagerContainer();
Не буду утверждать что я смог таким образом устранить утечку, но память начала освобождаться.
|
|
|
|
|
Rebelion
|
Дата: 25.02.2014
Да, ещё такой вопросинг - а сколько жрёт график PnL'я? Просто я отрисовываю для каждого прогона PnL, чтобы посмотреть распределение относительно 0 профита/лосса. Может, из-за этого память забивается? Сегодня попробую налабать тестер без визуализации - посмотрим на скорость и мемори лики, о результатах сообщу.
|
|
Спасибо:
|
|
|
|
|
casper-ss
|
Дата: 26.02.2014
Rebelion,сними снимок памяти и посмотри...но по моим наблюдениям не много она жрет, по крайнее мере терпимо, а вот что действительно разростается, так это всевозможные коллекции с обьектом trade...они и жрут память...у самого такая же фигня как у вас, правда до 16 гигов не доходило никогда, максимум 1-1,5 при торговле...на втором месте transaction и на третьем orders...остальное все не существенно...
|
|
Спасибо:
|
|
|
|