FILE和CStdioFile效率比較
阿新 • • 發佈:2019-02-13
今天打算讀取檔案對檔案內容進行操作,因為是使用MFC操作,首選CStdioFile,但是看網上說這個效率沒有FILE方式高,但不確定能高多少(以前也用過,但是沒有比較過),今天寫了點程式碼,比較了一下兩者的效率,結果可以看截圖
檔案大小:375,810,354位元組
行數:84946行
測試程式碼如下:
void ReadFile(LPCTSTR lpszFilePath) { if (!PathFileExists(lpszFilePath)) { return ; } __int64 nRows = 0,nRows1 = 0; FILE *fp; int nLen = 1024*128; char app1[1024*128] = {0}; m_timeCount.Begin(); if(fp=_tfopen(lpszFilePath,_T("r"))) { while(!feof(fp)) { memset(app1,0x00,nLen); fgets(app1,nLen,fp); nRows ++; } } fclose(fp); __int64 nSpan = m_timeCount.End(); CStdioFile file; CString strContent; m_timeCount.Begin(); if (file.Open(lpszFilePath, CFile::modeRead)) { while(file.ReadString(strContent)) { nRows1 ++; } file.Close(); } __int64 nSpan1 = m_timeCount.End(); CString str; str.Format(_T("File:%I64d(ms)-%I64d(rows)\r\nCStdioFile:%I64d(ms)-%I64d(rows)"),nSpan,nRows,nSpan1,nRows1); AfxMessageBox(str); }
結果截圖:
使用FILE方式讀取只用了1625毫秒,CStdioFile讀取耗時20714毫秒,差別太大了吧,將近二十倍,看來對於程式的效率來講,選擇合適的API很重要很重要!