1. 程式人生 > >FILE和CStdioFile效率比較

FILE和CStdioFile效率比較

今天打算讀取檔案對檔案內容進行操作,因為是使用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很重要很重要!