一. 檔案一次讀入速度
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資料檔案...