← Назад

Быстродействие

Добрый день. Хочу разобраться по теме быстродействия. Записал логи прохождения пары заявок, вот одна из них:

15:09:39.739 [Sending New Order] SRZ1 Buy Price: 0 Qty: 1 Thread: null 15:09:39.764 [Sending New Order] SRZ1 quikOrderID:0 Thread: null 15:09:40.009 [parse_order] 5584936686 54501178 Thread: null 15:09:40.011 [_trader_OrdersChanged] 5584936686 order status Active Thread: null 15:09:40.024 [_trader_OrdersChanged] 5584936686 order Accepted Accepted Thread: null 15:09:40.109 Thread: EventDispatcher thread #мои сделки 15:09:40.112 Thread: EventDispatcher thread #заявки 15:09:40.120 [parse_order] 5584936686 54501178 Thread: EventDispatcher thread #заявки 15:09:40.124 [_trader_OrdersChanged] 5584936686 order status Done Thread: EventDispatcher thread #заявки 15:09:40.126 [_trader_OrdersChanged] 5584936686 order Filled Accepted Thread: EventDispatcher thread #заявки 15:09:40.132 [_trader_NewMyTrades] 5584936686 8412 1 Thread: EventDispatcher thread #мои сделки 15:09:40.154 Thread: EventDispatcher thread #заявки 15:09:40.157 [parse_order] 5584936686 54501178 Thread: EventDispatcher thread #заявки 15:09:40.159 [_trader_OrdersChanged] 5584936686 order status Done Thread: EventDispatcher thread #заявки 15:09:40.161 [_trader_OrdersChanged] 5584936686 order Filled Accepted Thread: EventDispatcher thread #заявки 15:09:40.165 Thread: EventDispatcher thread #заявки 15:09:40.169 [parse_order] 5584936686 54501178 Thread: EventDispatcher thread #заявки 15:09:40.171 [_trader_OrdersChanged] 5584936686 order status Done Thread: EventDispatcher thread #заявки 15:09:40.174 [_trader_OrdersChanged] 5584936686 order Filled Accepted Thread: EventDispatcher thread #заявки Кусок кода метода парсинга ордера: <mark>Console.WriteLine(DateTime.Now.ToString(timefmt) + " [parse_order] " + order.Id + " " + order.TransactionId + ThreadName); switch (order.Status) { case StockSharp.BusinessEntities.OrderStatus.Accepted: { switch (order.State) { case OrderStates.Active: { Console.WriteLine(DateTime.Now.ToString(timefmt) + " " + "[_trader_OrdersChanged] "+order.Id+" order status Active"+ThreadName); .... ....</mark> Вопрос - почему так долго выполняется код между [parse_order] и [_trader_OrdersChanged] ? Когда событие происходит в основном потоке(name = null), понятно что там может мешать что угодно. Но когда событие идет в потоке #заявки, там нечему мешать.

Комментарии (2)

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

Alexander
Alexander

конкатенация строк занимает как раз эти 2мс которые проходят попробуйте Stringbuilder

skuvv
skuvv Автор

Alexander Mukhanchikov: конкатенация строк занимает как раз эти 2мс которые проходят попробуйте Stringbuilder сделал тест на конкатенацию строки: <mark> DateTime start = DateTime.Now; string timefmt = "HH:mm:ss.fff"; int id = 100500; int tdId = 123123; string name = "name"; for (int i = 0; i < 1000000; i++) { string str = ""; str += DateTime.Now.ToString(timefmt) + " [parse_order] " + id + " " + tdId + name;

        }
        DateTime end = DateTime.Now;
        Console.WriteLine( (end-start).TotalMilliseconds);
        Console.ReadLine();</mark>

Результат в районе 2200мс = 0.0022мс на 1 строку, основное время при этом тратится на DateTime.Now.ToString(timefmt) около 70% Задержки явно не в приведенном выше коде. Очень хочется разобраться...