Вниз
Скачать: CL | DM;

о скорости чтения usb   Найти похожие ветки 

← →
vasilii   (2007-07-10 18:20) [0]

у меня есть usb-устройство, которое программа, написанная на delphi7 читает 2 раза быстрее, чем программа, написанная на C(MSVC2003) и делающая всё то же самое. мне только ясно - что время теряется при вызове драйвера usb (jangle или libusb). не подскажет ли кто-нибудь - в чём здесь может быть дело.
заранее благодарен.


← →
Сергей М. ©   (2007-07-11 08:12) [1]


> в чём здесь может быть дело


Не исключено, что дело в кривых руках VC-программиста


← →
vasilii   (2007-07-11 10:03) [2]

есть идеи поумнее?


← →
Сергей М. ©   (2007-07-11 10:06) [3]

Надо понимать, ты тот самый VC-программер, коль так реагируешь ?)


← →
vasilii   (2007-07-11 10:17) [4]

в общем - да. но это не только моё творчество, а коллективное.


← →
Anatoly Podgoretsky ©   (2007-07-11 10:18) [5]

Коллективные руки


← →
Rouse_ ©   (2007-07-11 10:20) [6]

Еще проблемма может быть в обьектниках от разработчика драйвера линкуемых к твоему проекту. Они различны для языков.


← →
vasilii   (2007-07-11 10:21) [7]

Удалено модератором


← →
REA   (2007-07-11 10:27) [8]

Подробности в студию.
А профайлером погонять пробовали?


← →
Сергей М. ©   (2007-07-11 10:28) [9]

Удалено модератором


← →
Rouse_ ©   (2007-07-11 10:39) [10]

Еще название девайса укажи...


← →
vasilii   (2007-07-11 12:16) [11]

девайс - usb-hub нашего изготовления.
профайлером не гоняли.
да там и гонять нечего - программа-то из несколоьких строк:


//sizeof(m_cb)==6
m_cb.cmd  = (USHORT) CMD_BULK_READ_START; //команда: на старт
m_cb.adr  = 0;
m_cb.data = 0;
retcode = usb_bulkwrite(EP_OUT, sizeof(m_cb), &m_cb); //EP_OUT==endpoint для команд
DWORD ticks = ::GetTickCount();
for( ULONG sc=0; sc < ulSectorCount; ++sc)
{
 retcode = usb_bulkread(EP_IN_BULK_HDD, SECTOR_SIZE, pChar);
 if (retcode != SECTOR_SIZE)
 {
    //FAILED
    break;
 }
}
ticks = GetTickCount()-ticks;
printf("\nticks: %d SectorCount:%d\nspeed: %f Mb/sec", ticks, ulSectorCount, double(ulSectorCount*SECTOR_SIZE)/double(ticks)/1000);

причем точно такая же на Delphi7 даёт скорость ровно в 2 раза выше.

к тому же я пробовал также и _динамическую_ загрузку, т.что обьектники разработчика тут не могут, видимо, играть роль.
и результат стабильно одинаковый для драйверов jungle(windrv) и libusb0.dll(v0.1.8 и v0.1.10.1)
чертовщина какая-то. я в отчаянии..


← →
tesseract ©   (2007-07-11 12:25) [12]


> причем точно такая же на Delphi7 даёт скорость ровно в 2
> раза выше.


Скорее всего что-то с указателями, выделение памяти  - долгая процедура.


← →
vasilii   (2007-07-11 13:01) [13]

дык.. здесь же нет никаких выделений памяти!
или Вы хотите сказать, что в драйвере она может выделяться, а драйвер пользуется средствами клиента? хмм.. если так - это интересно. надо как-то испытать..


← →
tesseract ©   (2007-07-11 13:27) [14]


>  retcode = usb_bulkread(EP_IN_BULK_HDD, SECTOR_SIZE, pChar);


т.е. память под pChar в драйвере выделяеться?

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


>  jungle(windrv)


гм, jungle или та самая обёртка Jungo для написания драйверов? Она запросто такое выкинуть может.


← →
vasilii   (2007-07-11 13:42) [15]

ха-ха. всё ясно!
на самом деле - наш хаб поддерживает вычитывание оч.больших блоков данных за один запрос (эта возможность появилась недавно). и в тесте на Delphi данные вычитывались именно большими блоками (его писал поектировщик), а в тесте на С - малыми порциями (а там конечно на каждый запрос - и выделение памяти драйвером под контексты,  (не знаю, насколько это существенно - переход в kernelmode и обратно), и главное - передача запроса устройству - вот и тормозА).
в обчем - нехватка доки. и пока не испросил проектировщика хаба...
спасибо всем за участие !!!


← →
StriderMan ©   (2007-07-11 14:39) [16]


> девайс - usb-hub нашего изготовления

а я думал такие штуки только в Китае делают...


← →
REA   (2007-07-11 16:23) [17]

Только что вот хотел сказать про размеры блоков. Переключение направления приема/передачи в USB почему то довольно длительная обычно процедура.


← →
Rouse_ ©   (2007-07-11 17:02) [18]

Ну про блоки и я думал, но автор сам сказал > причем точно такая же на Delphi7 стало быть выдал неверную информацию, раз программы не идентичны...


← →
Сергей М. ©   (2007-07-11 17:06) [19]


> причем точно такая же на Delphi7 стало быть выдал неверную
> информацию


А ручки-то кривЫ, однако)


← →
Rouse_ ©   (2007-07-11 22:29) [20]


> а я думал такие штуки только в Китае делают...

Аладин и Актив тебе в пример - много вещей не только в прекрасном далеко "штампуют"

> А ручки-то кривЫ, однако)

С фактами не поспоришь :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.019 c
10-1137365312
Wistler
2006-01-16 01:48
2007.09.23
Internet Explorer и ActiveX


15-1187876173
iXT
2007-08-23 17:36
2007.09.23
Почему нельзя сменить ник(login) в анкете?


1-1184240354
Layner
2007-07-12 15:39
2007.09.23
Как узнать свойства и методы объекта OLEVariant


3-1179731199
White Barsik
2007-05-21 11:06
2007.09.23
Каскад из TADOQuery


1-1184085202
_Mik
2007-07-10 20:33
2007.09.23
Создание отчета




   Наверх