阅读:1795回复:7
如何提高写硬盘的速度。
一个关于内存及硬盘读写的问题。
写内存成块的写比一个字节一个字节的写肯定要快的,但是谁能够告诉我,在C里分别用那个API或者库函数来实现。 |
|
沙发#
发布于:2002-10-24 13:04
看看File Mapping APIs
一定有用,对你帮助太大了 |
|
|
板凳#
发布于:2002-10-24 13:59
一个关于内存及硬盘读写的问题。 调用写盘中断来实现 int86 int86x intdos intdosx intr |
|
|
地板#
发布于:2002-10-24 14:33
To Tom_lyd:
使用Windows的API是否内部调用了写盘中断呢?使用下面的代码fread(mbptr, 1, size, file); 效率应该是非常低的,采用什么样的函数会提高?有没有量的概念?另外,如果不写到硬盘中去,仅在内存中传输或拷贝数据,是否也存在同样的问题? To Koms Bomb: 正在看,应该会改善,你做过对比没有? |
|
地下室#
发布于:2002-10-24 14:37
To Tom_lyd: File Mapping肯定比FileIO快 |
|
|
5楼#
发布于:2002-10-24 15:05
调用Windows API不需要考虑这个问题,因为系统本身就有很强大的Cache管理机制帮你做这些了。
|
|
6楼#
发布于:2002-10-24 15:36
To fracker:
但是我如果用 memset(ptr,0,size); 或者 ZeroMemory(ptr,size); 哪个会更好呢?又比如 memcpy和CopyMemory哪个会更有效率一些?同样是API,如Koms Bomb 所说一样,File mapping 就比File IO效率要高,有什么好的经验没有? |
|
7楼#
发布于:2002-10-24 17:32
关于磁盘调度本身就是操作系统的一个任务,Windows操作系统对此已经有较好的算法,使得磁盘磁头移动的次数最少而写入的数据最多。除之此外,Windows自身已经有了缓冲策略(你可以开一个编辑软件,随意拷一些东西进去,然后Save,你会发现硬盘的灯不一定会亮,这说明,系统已经为你缓存起了,至于什么时候存到硬盘,得看缓冲算法)。而对于DOS系统,这方面的功能不强,有的时候,用户可以用自己的缓冲驱动来完成这种工作。
另一方面,硬盘的读写最小单位是扇区,而不是字节,所以,你即使你只读写一bit,实际读写的也最小是一扇区。 |
|
|