Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

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

Форум: "Основная";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
10-1137332844
evgeney
2006-01-15 16:47
2007.09.23
Как определить что лист Excel пуст?


8-1165939363
TkN
2006-12-12 19:02
2007.09.23
Проблема с переполнением памяти


2-1188203269
Квэнди
2007-08-27 12:27
2007.09.23
onmousemove в stringgrid


15-1188156848
Dik59
2007-08-26 23:34
2007.09.23
Странности с установкой RX-компонент


2-1188308817
harisma
2007-08-28 17:46
2007.09.23
Как отдебагать dll?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский