讀寫檔案速度測試

2021-05-24 01:05:04 字數 2158 閱讀 1159

一. 檔案一次讀入速度

linux下讀檔案這東西最後都是要通過系統呼叫sys_read(fd,buf,count)來實現的,所以如果要提高速度,就是最簡單地呼叫sys_read的封裝,比如直接用read()或fread()。下面是我在linux下的幾個測試。

首先建立乙個130m資料檔案 dd if=/dev/zero of=data bs=1024k count=130

[dd if=/dev/zero of=data bs=1024k count=130 轉換和拷貝檔案,從輸入if的源往of的目的位址拷貝,每個block1024k,一共拷貝130個。]

分別用fread,read和fgets一次讀入全部大小檔案所消耗時間對比,其中

size=130*1024*1024

char *buf=new char[size];

下面是測試結果(機器intel(r) pentium(r) 4 cpu 3.20ghz, mem 1g):

1.fread(buf,size,1,fp)一次讀入

real    0m0.187s

user    0m0.000s

sys     0m0.180s

2.read(fdin,(void *)buf,size)一次讀入

real    0m0.187s

user    0m0.000s

sys     0m0.184s

3.多次fgets(buf,size,fp),每次1k

real    0m0.356s

user    0m0.136s

sys     0m0.220s

4.fgets(buf,size,fp)一次讀入

real    0m0.305s

user    0m0.072s

sys     0m0.232s

上面看到越簡單的函式(read()和fread()),速度越快,其他的輸入封裝函式只不過是為了方便滿足特殊需要,並不見得讀的速度會很快。對於3和 4,因為在sys_read()內部有對讀入大小的判斷和while迴圈,所以大檔案讀取也沒必要像3那樣分多次呼叫fgets()來讀檔案.

另外用mmap()記憶體對映來讀入檔案的時間如下:

real    0m0.231s

user    0m0.068s

sys     0m0.164s

也並沒有比直接read()快,網上找到一種解釋是對於需要頻繁讀寫操作的,mmap效率才會顯著提高。下面來模擬頻繁讀寫操作。

二. 檔案頻繁讀寫速度測試

1. 這乙個測試模擬頻繁檔案讀寫操作,500m大小的資料檔案data.in,每次從中讀入1k個位元組對每個位元組做加1簡單計算,再寫到另乙個檔案data.out中。

//mmapx1.c

#define size 1024*1024*500

#define len 1024

#include

int main()

lseek(fdout,size-1,seek_set);

write(fdout,"/0",1);

//因為data.out是空檔案,必須建立乙個空洞讓其大小成為size來進行下面的mmap

if((dst=mmap(0,size,prot_read|prot_write,map_shared,fdout,0))==map_failed)

memcpy(dst,src,size);

p=(char*)dst;

for(i=0;i結論:上面可以看到,對於頻繁io讀寫,採用mmap儲存對映可以有效提高效率(20s到9s)

3.mmap記憶體對映還有乙個好處,就是直接在乙個檔案內任意讀寫修改某個位元組,就像操作儲存區一樣,比如下面一段程式是實現對data.in中每個位元組資料加1的計算。

//mmapx3.c

#include

#include

#include

#include

#include

#define size 1024*1024*500

#define len 1024

int main()

p=(char*)src;

for(i=0;i上面對乙個大檔案內的所有位元組各自改變加1,並儲存在原來的檔案中,採用mmap儲存對映的方法可以大大提高效率。對於頻繁地隨機改寫某個檔案內的某些部分位元組內容的情況來說,這是乙個有效的選擇。

Windows檔案讀寫速度

這幾天在研究怎麼才能加快windows檔案讀寫速度,搜了很多文章,msdn也看了不少。稍微給大家分享一下。限制windows檔案讀寫速度的瓶頸其實最終還是 於我們硬碟的固有特性,磁碟本身的轉速和硬碟的序列化工作機制。我們所能做的只是改善軟體實現方法去逼近硬碟的極限讀寫速度。平時我們在拷貝貼上檔案的時...

Linux下讀寫速度測試

一.檔案一次讀入速度 linux下讀檔案這東西最後都是要通過系統呼叫sys read fd,buf,count 來實現的,所以如果要提高速度,就是最簡單地呼叫sys read的封裝,比如直接用read 或fread 下面是我在linux下的幾個測試。首先建立乙個130m資料檔案 dd if dev ...

Linux下讀寫速度測試

tag clinux 一.檔案一次讀入速度 linux下讀檔案這東西最後都是要通過系統呼叫sys read fd,buf,count 來實現的,所以如果要提高速度,就是最簡單地呼叫sys read的封裝,比如直接用read 或fread 下面是我在linux下的幾個測試。首先建立乙個130m資料檔案...