Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

о скорости чтения usb [D7, WinXP]


vasilii ©   (2007-07-10 18:20:00) 

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


Rouse_   (2007-07-11 22:29:00) [1]


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

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

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

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


Сергей М.   (2007-07-11 17:06:00) [2]


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


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


Rouse_   (2007-07-11 17:02:00) [3]

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


REA   (2007-07-11 16:23:00) [4]

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


StriderMan   (2007-07-11 14:39:00) [5]


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

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


vasilii   (2007-07-11 13:42:00) [6]

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


tesseract   (2007-07-11 13:27:00) [7]


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


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

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


>  jungle(windrv)


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


vasilii   (2007-07-11 13:01:00) [8]

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


tesseract   (2007-07-11 12:25:00) [9]


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


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


vasilii   (2007-07-11 12:16:00) [10]

девайс - 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)
чертовщина какая-то. я в отчаянии..


Rouse_   (2007-07-11 10:39:00) [11]

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


Сергей М.   (2007-07-11 10:28:00) [12]

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


REA   (2007-07-11 10:27:00) [13]

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


vasilii   (2007-07-11 10:21:00) [14]

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


Rouse_   (2007-07-11 10:20:00) [15]

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


Anatoly Podgoretsky   (2007-07-11 10:18:00) [16]

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


vasilii   (2007-07-11 10:17:00) [17]

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


Сергей М.   (2007-07-11 10:06:00) [18]

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


vasilii   (2007-07-11 10:03:00) [19]

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


Сергей М.   (2007-07-11 08:12:00) [20]


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо