我已經看到它在幾個地方,一個fprintf中()操作是慢一點,一個FWRITE()操作中,由於在fprintf中額外的格式化操作說明。我想看看我是否可以真正測試這個,所以我有一些示例代碼在下面(我相信)就是這樣做的。 結果當然總是有點不同,但是大部分的時間他們是這樣的:速度fprintf中的()與fwrite()將
魅力。沒有。每個fwrite()的ticks超過1000000次寫入:0.2000
平均沒有。超過百萬寫入每fprintf中()的蜱:0.1300
即FWRITE()似乎是實際上稍微慢一點的是fprintf中()。 所以我在這裏的問題是雙重的:
A.看代碼(下面)我用來測試這個,這是一個合理的方法來測試 這樣的事情?任何人都可以推測其產生的結果無論如何可以精確地表示每個操作實際需要多長時間(以 爲單位)?
B.如果是這樣,爲什麼fwrite()需要更長的時間,我認爲fprintf()有 有效更多的工作與格式?
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#define NO_OF_WRITES 1000000
int main()
{
clock_t start1, end1, start2, end2;
FILE *fp;
int i;
float avg;
float diffs = 0;
uint8_t byte = 0x30;
if ((fp = fopen("file.bin", "w")) == NULL)
{
printf("Error opening file for writing");
exit(-1);
}
for (i = 0; i < NO_OF_WRITES; i++)
{
start1 = clock();
fwrite(&byte, 1, 1, fp);
end1 = clock();
diffs += (end1 - start1);
}
avg = diffs/NO_OF_WRITES;
printf("Avg. no. of ticks per fwrite() over %d writes: %.4f\n", NO_OF_WRITES, avg);
diffs = 0;
for (i = 0; i < NO_OF_WRITES; i++)
{
start2 = clock();
fprintf(fp, "%c", byte);
end2 = clock();
diffs += (end2 - start2);
}
avg = diffs/NO_OF_WRITES;
printf("Avg. no. of ticks per fprintf() over %d writes: %.4f\n", NO_OF_WRITES, avg);
fclose(fp);
}
我想我會把時鐘時間捕獲for循環之外,但那只是我! – trumpetlicks
這是測試這種事情的好方法,但不同數據量和不同大小文件的時間是不同的。當虛空完成時,虛空即會對流進行沖洗。兩者都高度依賴於硬件和操作系統,因此您需要進行多次完整的運行才能獲得實際的數字。 – IdeaHat
我同意trumpetlicks,你應該計時整個循環不是每次迭代。另外,你應該確保每個測試的條件都一樣。刪除文件,打開它,寫入並關閉每個測試。 –