posts - 138,  comments - 384,  trackbacks - 0
在我的印象中有一种误区:总是认为底层比上层快,如汇编编的程序比Basic快,操作系统底层调用比上层调用速度快,甚至认为底层开发比上层开发有前途,没想到今天被一段程序推翻。

这是一段Linux上的C代码,请把复制缓冲区大小SIZE分别改为1和1024编译运行此程序,复制的文件1.mp3大约为5M,上代码:

Code


下面是运行结果(Ubutun8.10):

 

说明:

库函数当前比系统函数要高级,但此处在SIZE=1时,效率相差非常巨大。合理的解释是:指令从外部(库函数)到操作系统内核函数需要时间,库文件函数在fwrite到一定数量后才调用系统函数write,而如果直接使用系统函数write则每次都需要调用系统内核,故需要多次传递,另外估计应该和多次写磁盘也有关系。

posted @ 2009-06-09 14:49 81 阅读(152) 评论(0) 编辑

最近有个项目可能会使用磁盘在两个模块之间交换数据,并且对交换性能要求较高,由此自然想到了使用内存盘,但内存磁盘速度到底有多快?这个问题还是需要自己测试,为此从网上下载了免费、绿色的Ramdisk软件,虚拟了一个512M的内存盘,以下是测试结果:

 一。用HD Speed软件测试(此处是Read速度,写性能需要清空一个盘符,不好测):

磁盘:50M/S

内存盘:2.2G/S

结论:读相差40倍

 

二。自己写软件测试Read、Write速度:

代码很简单,示例如下:
 using (FileStream fs = new FileStream(this.textBox1.Text, FileMode.Create))           

{ byte[] buf = new byte[int.Parse(this.textBox2.Text) * 1024 * 1024];               

fs.Write(buf, 0, buf.Length);            }     

测试分别按读写1M、10M、50M文件比较:

文件大小        磁盘读/内存盘读           磁盘写/内存盘写

1M               2ms  / 1ms                 60ms / 4ms

10M             25ms / 25ms              240ms / 40ms

50M             160ms/158ms            1050ms / 200ms

以上可以看出:

读性能差不多,但写性能基本相差一个数量级。又一想内存和磁盘读速度不可能差这么接近,估计应该是读磁盘时有缓存,故再从磁盘上读一个未读过的50M左右文件,读取时间为1796ms,再读第二次时速度又提高到160ms。

 

 

 

 

 

 

posted @ 2009-06-09 12:19 81 阅读(294) 评论(0) 编辑