При тестировании на истории через пару виртуальных дней стабильно валится с эксепшном: Exception of type 'System.OutOfMemoryException' was thrown
Я пробовал делать:
GC.Collect();
GC.WaitForPendingFinalizers();
каждый виртуальный час - не помогло.
Валится обычно либо на AddInfoLog либо в нердах MarketDepthGenerator'а
Похоже что кто-то накапливает объекты и не отдает их.
Если подскажете как локализовать проблему попробую это сделать.
Kommentare (17)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Наверное проще всего - это профайлером. А так общие вопросы. Сколько инструментов используете при тестировании? Стратегия строит свечки?
какой профайлер посоветуете?
инструментов - падает даже на 2х про свечки - падает даже без них я комментарил вообще большую часть кода - оставлял только почти пустой OnProcess и все равно падает у меня предположение что это происходит из-за генерации стакана (т.к. иногда выдает что памяти не хватило на CreateQuote гдето в глубинах генерения стакана)
Получилось у кого-нибудь локализовать проблему? У меня тоже вылетает (((
Даже на последних версиях?
Да, у меня 3.2.9.
x64 или x86? Сколько памяти по таск манагеру начинает кушать приложение? Попробуйте уменьшить потоки загрузки и кол-во дней в памяти (описано в доке chm раздел Тестирование на истории).
У меня x64. По умолчанию были следующие параметры LoadingThreadCount=3. Количество ядер у меня 2 плюс 2 виртуальных. А вот с DaysInMemory не понял. Стояло 15. Хотя в описание для x64 должно быть 10. Вообщем постепенно уменьшал потоки и дни программа все равно висла. Последний тест был поток=1, дни=2. Памяти было свободно 1600 зависло на уровне 340. Первые тесты делал было 1250 и вылетало при отсутствии свободной памяти.
Не совсем понятно... Висит или вылетает?
У меня сначала была включена студия и свободной памяти было меньше изначально, во время тестирования доходило до 0 и вылетало. А потом я высвободил - изначально стало 1600. Зависло на уровне 340.
Ок, понятнее.. А почему думаете что зависло? Событие ITrader.NewTrades вызывается?
Появилось сообщение, что программа не отвечает. Я запускал .exe, событие не смотрел
Мы сейчас говорим про пример SampleHistoryTesting?
В данном случае там есть мои модификации незначительные. Но я прогнал еще раз пример SampleHistoryTesting по тем же данным 1 поток 5 дней. Инструмент RIU1 с 9.02.2011 по 15.08.2011. Память свободную приложение также задействовало и комп фактически полностью висел (у меня I5 и Озу 4 гб) и высвечивалось, что приложение не отвечает. Но я оставил на несколько часов комп и в конце концов тестирование прошло по всем данным. Попробую еще раз подождать и со своим примером.
Какие показатели по памяти? Насколько загружены потоки? Пробовали дни уменьшить?
Если по примеру SampleHistoryTesting, то по памяти - задействовано была вся свободная память-где-то 1,5 гб. Процессор загружен на 50%. Дни меньше 5ти не пробовал. Если по моему примеру, то писал выше.
А еще при попытке остановить тестирование прежде чем оно закончится получается вот это
А еще при попытке остановить тестирование прежде чем оно закончится получается вот это
Да, с этим проблема концептуального характера. Похоже, нет возможности сделать метод Stop блокирующим. Придется делать его как и для стратегий - асинхронным.
Перешёл на 3.2.5 - у меня тоже вылетает :(
Пример - Гидра, показать сделки по RIH1 за период 01.12.2010-15.03.2011 Вылетает на получении Trades GetTradeStorage(security).Load.
Примерно можно загрузить чуть более миллиона записей - дальше OutOfMemory. В старой верии (3.1.3) выгружалось без проблем. Память растёт где-то до 1,2гига, больше почему-то не хавает - это нормально? Система Win7 32bit.
Ещё заметил - если выгрузить сначала сделки по одному инструменту (меньше млн.), потом ещё по другому - аналогично - почему-то не освобождается память.