lstrcat(lpDst, szByte); } // 处理最后一个字节 wsprintf(szByte, "%02X", lpbySrc[i]); lstrcat(lpDst, szByte); free(lpbySrc); lpbySrc = NULL; CloseHandle(hFileSrc); // 保存到目标文件 hFileDst = CreateFile(szFileDst, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); WriteFile(hFileDst, (LPCVOID)lpDst, lstrlen(lpDst) * sizeof(TCHAR), &dwReaded, NULL); free(lpDst); lpDst = NULL; CloseHandle(hFileDst); } 当把这段代码拉上阵的时候,我发现虽然它可以正常工作,结果也是我想要的,但是它处理文件的速度慢得出奇,甚至文件的大小相差几十K都会有明显的速度差距!我再次浏览了一遍我的代码,还是没有发现什么致命的错误。我灵机一动,心想还好我用的是GUI界面,于是我没费多少力气,在这个线程中加了几行代码和一个Progress Bar,继续编译运行。 这次的结果出来了,我发现指示字节处理进度的那个Progress Bar越往后走进展速度越慢。我恍然大悟,打开了VC附带的strcat源码: char * __cdecl strcat (char * dst, const char * src) { char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ) ; /* Copy src to end of dst */ return( dst ); /* return dst */ } 这个过程很明了,先查找字符串末尾的结束符,然后再进行字符串的复制。那么在我的代码中,每完成一次循环,lstrcat就要不厌其烦地去寻找一遍结束符,然后再进行复制——这也就造成了很多无用功,也就是Progress Bar越走越慢的原因。
|
閺€鎯版閹存劕濮�閺屻儳婀呴弨鎯版>>
正在阅读:VC++学习:字符串黑箱的背后VC++学习:字符串黑箱的背后
2004-03-01 10:18
出处:CSDN
责任编辑:linjixiong
键盘也能翻页,试试“← →”键