Быстродействие
Atom Ответить
25.10.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), понятно что там может мешать что угодно.
Но когда событие идет в потоке #заявки, там нечему мешать.

Теги:


Спасибо:




2 Ответов
Alexander

Фотография
Дата: 25.10.2011
Ответить


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

skuvv

Фотография
Дата: 25.10.2011
Ответить


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%
Задержки явно не в приведенном выше коде. Очень хочется разобраться...
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy