I have a function like this:
BOOL CGameData::GetCheckSum(BYTE o_byObjCheckSum[32], int *o_pnFileSize, char* pFilePath) { memset(o_byObjCheckSum, 0x00, 32); *o_pnFileSize = 0; UINT uiCheckSum = 0; if(strlen(pFilePath) <=0) { return FALSE; } FILE *fp; fp=fopen(pFilePath, "rb"); if(NULL == fp) { return FALSE; } fseek( fp, 0L, SEEK_END ); long lFileSize = ftell( fp ); *o_pnFileSize = lFileSize; fseek( fp, 0L, SEEK_SET ); BYTE *pFileData = new BYTE [lFileSize]; fread(pFileData, lFileSize, 1, fp); sha256_encode(pFileData, lFileSize, o_byObjCheckSum); fclose(fp); delete [] pFileData; return TRUE; } How can I make this faster?
If it will help, this function is called here:
STRNCPY_MEMSET(szResDirectoryPath, RESOBJ_DIRECTORY_PATH, MAX_PATH); if(FALSE == GetAllFileNameList(&vectFileNameList, szResDirectoryPath)) { g_pFieldGlobal->WriteSystemLogEX(TRUE, "[ERROR] LoadResObjCheckList_ error !!, Directory(%s)\r\n", szResDirectoryPath); return FALSE; } nCnt = vectFileNameList.size(); for(i=0; i < nCnt; i++) { SRESOBJ_CHECKSUM resObjCheckSum; CGameData tmMapGameData; char szFileFullPath[MAX_PATH]; MEMSET_ZERO(&resObjCheckSum, sizeof(resObjCheckSum)); STRNCPY_MEMSET(resObjCheckSum.szResObjFileName, vectFileNameList[i].c_str(), SIZE_MAX_RESOBJ_FILE_NAME); _strupr(resObjCheckSum.szResObjFileName); sprintf(szFileFullPath, "%s/%s", szResDirectoryPath, resObjCheckSum.szResObjFileName); if(tmMapGameData.GetCheckSum(resObjCheckSum.byDigest, &resObjCheckSum.nFileSize, szFileFullPath)) { m_mapResObjCheckSumList.insert(pair<string,SRESOBJ_CHECKSUM>(resObjCheckSum.szResObjFileName, resObjCheckSum)); } }