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));        }    }
Speeding up create CRC function
c++;performance