6273|11

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

USB 每次BulkTransfer之后 性能下降 [复制链接]

Wince 5.0下,USB读取设备数据
USB BULK TRANSFER,我用的是同步传输方式,没有设置回调函数,因此错误检测也没做。只判断Transfer是否成功返回。一次传输64Bytes,一共取640个包
我的问题是:每次传输后性能都下降一些:
打印如下信息:

Subimg Bulk!
COST TIME 912 ms PER BULK !

Subimg Bulk!
COST TIME 915 ms PER BULK !

Subimg Bulk!
COST TIME 918 ms PER BULK !

Subimg Bulk!
COST TIME 924 ms PER BULK !

Subimg Bulk!
COST TIME 943 ms PER BULK !

Subimg Bulk!
COST TIME 1005 ms PER BULK !

Subimg Bulk!
COST TIME 1066 ms PER BULK !

Subimg Bulk!
COST TIME 1117 ms PER BULK !

Subimg Bulk!
COST TIME 1171 ms PER BULK !

Subimg Bulk!
COST TIME 1308 ms PER BULK !

Subimg Bulk!
COST TIME 1382 ms PER BULK !

Subimg Bulk!
COST TIME 1427 ms PER BULK !

Subimg Bulk!
COST TIME 1449 ms PER BULK !

Subimg Bulk!
COST TIME 1518 ms PER BULK !

Subimg Bulk!
COST TIME 1650 ms PER BULK !

Subimg Bulk!
COST TIME 1657 ms PER BULK !

Subimg Bulk!
COST TIME 1768 ms PER BULK !

Subimg Bulk!
COST TIME 1786 ms PER BULK !

Subimg Bulk!
COST TIME 1858 ms PER BULK !

Subimg Bulk!
COST TIME 1919 ms PER BULK !

Subimg Bulk!
COST TIME 1986 ms PER BULK !

Subimg Bulk!
COST TIME 2134 ms PER BULK !

Subimg Bulk!
COST TIME 2225 ms PER BULK !

Subimg Bulk!
COST TIME 2190 ms PER BULK !
性能下降应该和应用没有关系,我有时等待了一段时间,再做性能也仍然下降,我怀疑是我的驱动中的问题,不知道是不是内存释放的问题,但我只在传输之前pDataBuf = (PBYTE)LocalAlloc(LPTR,64);在传输结束后就LocalFree了,请问我的问题可能出在哪里,请各位给我个思路,谢谢

最新回复

我个人分析是没有CloseTransferHandle(hTransfer); 的原因, 而IssueBulkTransfer跟踪进去确实也没有做什么事情,就算是使用同步(回调函数)。  详情 回复 发表于 2009-12-19 08:35
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我在PB的Remote Performance Monitor下监视memory load,发现确实每次传输都伴随着内存的增加,当把传输IOCTL去掉之后,单更新界面就不会增加Memory Load了.Memory增加是从初始的40%,逐次向上增加.
我把那个pBulkbuf换成临时变量的之后,性能有所提高,但仍然在持续恶化
COST TIME 539 ms PER BULK !

Subimg Bulk!
COST TIME 482 ms PER BULK !

Subimg Bulk!
COST TIME 673 ms PER BULK !

Subimg Bulk!
COST TIME 654 ms PER BULK !

Subimg Bulk!
COST TIME 626 ms PER BULK !

Subimg Bulk!
COST TIME 695 ms PER BULK !

Subimg Bulk!
COST TIME 768 ms PER BULK !

Subimg Bulk!
COST TIME 825 ms PER BULK !

Subimg Bulk!
COST TIME 890 ms PER BULK !
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
能否把你调用IOCTL批量传输的那点贴出来看一下。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
我之前也是没用回调函数,也有内存泄露问题。只要调用IOCTL就有内存泄露。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
hTransfer = pUsbFuncs->lpIssueBulkTransfer(hUsbDevice,
                        NULL,NULL,
                        USB_IN_TRANSFER|USB_SHORT_TRANSFER_OK,pBulkBytes,
                        pBuffer,NULL);

IOCTL调用批量传输[code]
case IOCTL_FINGERPRINT_DEVICE_CAPTURE_ONE_FRAME:
        RETAILMSG(1, (TEXT("Subimg Bulk!\r\n")));
        startaddress=0;
        DWORD timeCount = GetTickCount();
        for(i=0;i<640;i++)                                {
      if(BulkTransfer(pDrv,pOut,&startaddress,pTempBuf))       
            pdwBytesWritten +=64;
         }
      timeCount= GetTickCount() - timeCount;
      RETAILMSG(1,(TEXT("COST TIME %d ms PER BULK ! \r\n"),
                                timeCount
                                ));[code]
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
pTempBuf是在XXX_IOCONTROL中分配的64Bytes的内存在,XXX_IOCONTROL返回之前LocalFree
也就是lpIssueBulkTransfer的第六个参数。每次IOCTL做了640次的Bulk传输
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
我换了异步方式试过了,还是内存泄漏存在
hTransfer = pUsbFuncs->lpIssueBulkTransfer(hUsbDevice,
                //        NULL,NULL,
                DefaultTransferComplete, hEvent,
                        USB_IN_TRANSFER|USB_SHORT_TRANSFER_OK,pBulkBytes,
                        pBuffer,NULL);
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

8
 
有没有调用完了传输函数有没有CloseTransferHandle(hTransfer);

是否是4K内存的少?调用批量传输函数1到2次就泄露了4K?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
我不知道怎么看具体的,我这样比较的,在应用程序中分配了160K的内存,结果Performance Moniter显示上升了1%,而我每次批量传输内存泄漏上升的有2%。的确我没有CloseTransferHandle,也没有ClosePipe
但是很奇怪,每次批量传输的数据量只有40K,泄漏的算起来要300k,泄漏的内存干什么去了
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
我试过CloseTransferHandle,极其慢,需要2000+ms,但是没有内存泄漏,看过BSP中PUBLIC里Drivers,好像都是用IssueBulkTransfer,没有用LP_ISSUE_BULK_TRANSFER的
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

11
 
我改成IssueBulkTransfer就好了,缘分啊,大哥,啥也不说了,眼泪哇哇的,谢谢啊
这是打印的结果
Subimg Bulk!
COST TIME 577 ms PER BULK !

Subimg Bulk!
COST TIME 463 ms PER BULK !

Subimg Bulk!
COST TIME 459 ms PER BULK !

Subimg Bulk!
COST TIME 464 ms PER BULK !

Subimg Bulk!
COST TIME 465 ms PER BULK !

Subimg Bulk!
COST TIME 459 ms PER BULK !

Subimg Bulk!
COST TIME 467 ms PER BULK !

Subimg Bulk!

Subimg Bulk!
COST TIME 462 ms PER BULK !

Subimg Bulk!
COST TIME 460 ms PER BULK !

Subimg Bulk!
COST TIME 459 ms PER BULK !

Subimg Bulk!
COST TIME 466 ms PER BULK !

Subimg Bulk!
COST TIME 459 ms PER BULK !

Subimg Bulk!
COST TIME 461 ms PER BULK !

Subimg Bulk!
COST TIME 464 ms PER BULK !

Subimg Bulk!
COST TIME 457 ms PER BULK !

Subimg Bulk!
COST TIME 458 ms PER BULK !

Subimg Bulk!
COST TIME 466 ms PER BULK !

Subimg Bulk!
COST TIME 461 ms PER BULK !

Subimg Bulk!
COST TIME 466 ms PER BULK !
最后的结论是:usbClient的这层外衣做的还是蛮好的,尤其是lpIssueBulkTransfer的调用和之后的错误检测,并且适时的CloseTransferHandle(hTranfer),这都需要我再好好研究一下.
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

12
 
我个人分析是没有CloseTransferHandle(hTransfer); 的原因,
而IssueBulkTransfer跟踪进去确实也没有做什么事情,就算是使用同步(回调函数)。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表