pearlish
驱动牛犊
驱动牛犊
  • 注册日期2004-03-27
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1720回复:9

从USB输入的高速数据存储有什么好方法?(50分)

楼主#
更多 发布于:2004-06-26 00:25
从USB输入的高速数据存储有什么好方法?


我做完了USB的扳子,现有速率为10M/s左右的数据需要存储在计算机上,普通的文件读写操作估计速度不够。我现在打算是先把数据写入内存文件中,再通过内存映射文件写到硬盘上,不知道可行不可行。那位大侠作过类似的工作请指点指点,越详细越好,谢谢!!!
越详细给分越多!!!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-12 10:55
应该算是并行的,只是在刚开始时,读线程先从设备读数据,读到数据后存储线程才存储数据,而此时读线程还在继续读数据,并没有停,可以多开辟几块缓冲区,循环使用。
dchen402
驱动牛犊
驱动牛犊
  • 注册日期2003-07-04
  • 最后登录2004-10-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-12 08:58
jinghuiren ,你所说的双线程是串行的吧?可不可以作成并行的?
darydl
驱动小牛
驱动小牛
  • 注册日期2003-06-29
  • 最后登录2017-05-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-07-11 13:27
你的两个线程需要同时工作吗?
windrv
驱动牛犊
驱动牛犊
  • 注册日期2004-07-05
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-10 13:29
采用内存映射的方法,一次映射的内存受32bit地址空间的限制,不能太多。

在Windows 2000 professional版中,每个进程可以有4GB的地址空间,但是User mode下真正可用的只有2GB,另一半分配给了Kernel mode。在可用的2GB中,程序代码、程序数据又用掉了很大一块。真正可用来做内存映射的地址空间也并不多。而且,如果把所有可用的地址空间都映射了,小心程序再也申请不出内存。估计在Microsoft将要推出的新一代64bit操作系统Longhorn中,这个限制就不会成为问题了。

在高速数据存贮系统中,频繁的线程切换会影响写盘的performance。作为比较,你可以试一下暂停读线程,让写线程全速工作,把其余的Windows的进程都关了,看看写盘的速度能到多少。
fangps
驱动牛犊
驱动牛犊
  • 注册日期2004-05-31
  • 最后登录2004-12-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-06 10:18
我现在就是开了两个线程,一个读一个写,但是感觉速度也不够啊,现在一般只到8-10M/S左右,接下去就上不去了,而且我在程序中加了标志符测量文件存储的速度,好象比读的慢,而且我在程序中已经加了比较大的缓存了

还有采用内存映射是不是文件不能太大啊
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-06 08:42
我想你可以开两个线程,一个线程专管读数据,一个线程管把数据写到硬盘上,我觉得这样应该没问题。
如果实在不行可以考虑用虚拟盘,在硬盘上虚拟出一块内存,用它做数据交换区,这样能更快一些。这种方法只是听过,但没有做过。
chaoswang
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2005-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-05 10:50
windrv,能不能讲详细一点
你每次往文件里写多大的数据?
windrv
驱动牛犊
驱动牛犊
  • 注册日期2004-07-05
  • 最后登录2004-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-05 03:34
前面那位不知道有没有完成"内存映射文件写到硬盘",请交流交流。

我觉得在10MB/s的量级,普通的文件写操作就可以了。在7200 RPM的硬盘上,我做的一个项目,从USB来的数据流是8MB/s, 写文件的数据流量平均可以到20MB+/s。技术上有一些优化,涉及公司利益,不能多说,用大的数据缓冲区是其中一个重要因素。
iamzhh
驱动牛犊
驱动牛犊
  • 注册日期2003-12-10
  • 最后登录2007-03-24
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-02 16:22
我目前也面临这个问题,需要存储大数据量的数据流,目前还没有做完硬件部分,不知你是否已经有了好的解决方案!
如果可能的话,一起探讨一下。
我的Email:nkdahui@126.com
游客

返回顶部