阅读:2143回复:23
把实时的数据存储到硬盘上,怎么操作比较好?熟悉文件系统的水友提提意见用户被禁言,该主题自动屏蔽! |
|
最新喜欢:![]() |
沙发#
发布于:2004-08-11 12:50
看了大家的帖,觉得想得太深了。做法太麻烦。 恩, 抄下来先。 |
|
|
板凳#
发布于:2004-08-11 12:29
看了大家的帖,觉得想得太深了。做法太麻烦。
既然是WINDOWS系统,就不要想得太复杂了。 有一个方法是: 1、把硬盘做成NTFS分区。 2、先建立足够大的内存映射文件(一个文件几百GB) 3、每次收到数据后往内存映射文件写。 在长时间工作、大数据量时会工作得比较好,开发难度降低了。 |
|
|
地板#
发布于:2004-08-10 14:39
要保证不丢失数据。
只看一段时间内的平均速度是不行的。 比如有一个采集系统,连续把数据传到内存,再从内存到硬盘。 我的作法是,直接用SCSI磁盘,通过ASPI函数按扇区写硬盘。 可以做到40MB/s采样直接存盘。 验证方法: 用20MHz采样频率采一扫频信号,存盘后做时间――频率图,看频率是不是连续。 |
|
|
地下室#
发布于:2004-08-10 10:19
我用fwrite写文件
硬盘是Maxtor 80GB 7500rpm ATA的 可以达到35M的写速率 当然如果要稳定不丢数据,20~25M应该没问题 |
|
5楼#
发布于:2004-08-06 10:55
继续关注中
|
|
|
6楼#
发布于:2004-08-05 16:44
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2004-08-05 16:29
我已经实现了不丢数据了。 众多水鬼们强烈要求资源共享 :P |
|
|
8楼#
发布于:2004-08-05 16:28
IDE标称传输速度、硬盘缓冲大小、PCI-IDE接口速度等等因素,
对传输速率有什么影响啊? 恩,反正偶没做过, 乱问一通再说 :D |
|
|
9楼#
发布于:2004-08-05 16:25
用API的WriteFile写普通的IDE硬盘,
速度大约能到多少啊? |
|
|
10楼#
发布于:2004-08-05 16:24
用户被禁言,该主题自动屏蔽! |
|
11楼#
发布于:2004-08-05 16:23
直接通过IO写硬盘扇区速度很慢,还是通过文件系统的好,我曾经尝试写一个类似CIH的2K/XP下RING0病毒,直接写硬盘扇区,发现速度很慢就放弃了,郁闷。。。。。。 是数据直接写入物理扇区? 还是写到硬盘的缓冲区后,待空闲或缓冲满,硬盘控制器再将缓冲内容写入物理扇区? |
|
|
12楼#
发布于:2004-08-05 16:10
如果持续15MByte/s的速度的话对系统性能会有点影响哦。 用ZwWriteFile 基本上就凑合了。我试过1G的数据大概就是1分钟多一些。
|
|
13楼#
发布于:2004-08-05 15:31
我现在的做法是在运行一个系统线程,将实时的数据用ZwWriteFile向文件里写。大家提提建议,可能请不了大家吃饭,但是分数相送没问题。 首先绝对不可能实时的,这违背多任务操作系统的基本思想,NTZwWriteFile引起I/O管理器工作,一般情况这将调用文件系统驱动的快速I/O.快速I/O与Cache管理器一起工作,将数据cache.(因此不会实时写硬盘,不过将加快数据传输速率)如果没有快速I/O,I/O管理器发送IRP_MJ_WRITE给文件系统驱动程序,驱动程序处理解析产生IRP,然后将IRP传递给位于I/O堆栈的下一个驱动程序处理.....以此类推,最后将写入硬盘。 一般情况下中不过要达到15MByte/s是绝对可以的,现在的硬盘一般都能达到25MByte/s。 在NT系统中如果是大数据量的文件传输操作,应该使用异步I/O用信号量来通知APP读写操作的完成情况, 给分吧,我最需要分,DDK2003正愁没分下载!!! |
|
|
14楼#
发布于:2004-08-05 14:38
直接通过IO写硬盘扇区速度很慢,还是通过文件系统的好,我曾经尝试写一个类似CIH的2K/XP下RING0病毒,直接写硬盘扇区,发现速度很慢就放弃了,郁闷。。。。。。
|
|
|
15楼#
发布于:2004-08-05 13:46
用户被禁言,该主题自动屏蔽! |
|
16楼#
发布于:2004-08-05 12:56
常用的是做一个队列,每次的写请求都入队列,并触发一个Event。
系统线程里等待这个Event,每次触发就把队列里的写请求清空。(当然,数据也要写上去 :D :D) |
|
17楼#
发布于:2004-08-05 12:30
我曾做过一个存储实时数据的,好像一次存9999个没问题,再多了就出错!只好多次存储!
当时也没查处问题原因! |
|
18楼#
发布于:2004-08-05 12:19
用户被禁言,该主题自动屏蔽! |
|
19楼#
发布于:2004-08-05 11:51
唯一能做的就是,保证扇区连续,另外一次写的数据不要超过一个磁道的容量,一般是63*512。
另:上面说的并不是没有意义,无非是你自己写个专用的读写函数,函数中用OFFSET参数就行了。关键是考虑极限速度能不能达到你的要求。 |
|
上一页
下一页