Быстродействие
Atom Reply
10/25/2011


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

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 #заявки

Кусок кода метода парсинга ордера:
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);
....
....

Вопрос - почему так долго выполняется код между [parse_order] и [_trader_OrdersChanged] ?
Когда событие происходит в основном потоке(name = null), понятно что там может мешать что угодно.
Но когда событие идет в потоке #заявки, там нечему мешать.

Tags:


Thanks:




2 Answers
Alexander

Avatar
Date: 10/25/2011
Reply


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

skuvv

Avatar
Date: 10/25/2011
Reply


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

сделал тест на конкатенацию строки:
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();

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


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy