阅读:1719回复:9
从USB输入的高速数据存储有什么好方法?(50分)
从USB输入的高速数据存储有什么好方法?
我做完了USB的扳子,现有速率为10M/s左右的数据需要存储在计算机上,普通的文件读写操作估计速度不够。我现在打算是先把数据写入内存文件中,再通过内存映射文件写到硬盘上,不知道可行不可行。那位大侠作过类似的工作请指点指点,越详细越好,谢谢!!! 越详细给分越多!!! |
|
沙发#
发布于:2004-07-02 16:22
我目前也面临这个问题,需要存储大数据量的数据流,目前还没有做完硬件部分,不知你是否已经有了好的解决方案!
如果可能的话,一起探讨一下。 我的Email:nkdahui@126.com |
|
板凳#
发布于:2004-07-05 03:34
前面那位不知道有没有完成"内存映射文件写到硬盘",请交流交流。
我觉得在10MB/s的量级,普通的文件写操作就可以了。在7200 RPM的硬盘上,我做的一个项目,从USB来的数据流是8MB/s, 写文件的数据流量平均可以到20MB+/s。技术上有一些优化,涉及公司利益,不能多说,用大的数据缓冲区是其中一个重要因素。 |
|
地板#
发布于:2004-07-05 10:50
windrv,能不能讲详细一点
你每次往文件里写多大的数据? |
|
地下室#
发布于:2004-07-06 08:42
我想你可以开两个线程,一个线程专管读数据,一个线程管把数据写到硬盘上,我觉得这样应该没问题。
如果实在不行可以考虑用虚拟盘,在硬盘上虚拟出一块内存,用它做数据交换区,这样能更快一些。这种方法只是听过,但没有做过。 |
|
5楼#
发布于:2004-07-06 10:18
我现在就是开了两个线程,一个读一个写,但是感觉速度也不够啊,现在一般只到8-10M/S左右,接下去就上不去了,而且我在程序中加了标志符测量文件存储的速度,好象比读的慢,而且我在程序中已经加了比较大的缓存了
还有采用内存映射是不是文件不能太大啊 |
|
6楼#
发布于:2004-07-10 13:29
采用内存映射的方法,一次映射的内存受32bit地址空间的限制,不能太多。
在Windows 2000 professional版中,每个进程可以有4GB的地址空间,但是User mode下真正可用的只有2GB,另一半分配给了Kernel mode。在可用的2GB中,程序代码、程序数据又用掉了很大一块。真正可用来做内存映射的地址空间也并不多。而且,如果把所有可用的地址空间都映射了,小心程序再也申请不出内存。估计在Microsoft将要推出的新一代64bit操作系统Longhorn中,这个限制就不会成为问题了。 在高速数据存贮系统中,频繁的线程切换会影响写盘的performance。作为比较,你可以试一下暂停读线程,让写线程全速工作,把其余的Windows的进程都关了,看看写盘的速度能到多少。 |
|
7楼#
发布于:2004-07-11 13:27
你的两个线程需要同时工作吗?
|
|
8楼#
发布于:2004-07-12 08:58
jinghuiren ,你所说的双线程是串行的吧?可不可以作成并行的?
|
|
9楼#
发布于:2004-07-12 10:55
应该算是并行的,只是在刚开始时,读线程先从设备读数据,读到数据后存储线程才存储数据,而此时读线程还在继续读数据,并没有停,可以多开辟几块缓冲区,循环使用。
|
|