вторник, 24 мая 2011 г.

Диагностика тормозов при разработке торговых систем

Не так давно столкнулась с тем, что задача робота подвисала время от времени при отправке заявок в систему. Стала вылавливать эту "заразу" простым дедовским методом — писать в лог время до и после участков кода, которые вызывали подозрение (в том плане, что могли тормозить).

В результате у меня появилось такое огромное количество участков кода типа:
DateTimeToString(strDT,'h:m:s.z',ServerDT);
S := Format ('MTS12: Time: Offer FindOrderIdByPriceAndDirection end: %s',[strDT]);
R.fATLibLog(PChar(S),4);

что я потом запарилась анализировать лог. Было вообще непонятно: проблема крылась за пределами тех участков, в которых я ее подозревала.

Но ответ был найден — тормоза случались при поиске SecIdx инструмента. Видимо, такое их огромное количество.

А решение проблемы с тормозами — введение в структуру задачи поля TaskSecIdx (индекс инструмента), которое вычисляется один раз и на следующих итерациях при отправлении заявки не пересчитывается. В рамках торговой сессии это делать можно спокойно.
___

Чтобы быть в курсе обновлений блога, подпишитесь на RSS.