闂傚倸鍊搁崐宄懊归崶顒€违闁逞屽墴閺屾稓鈧綆鍋呭畷宀勬煛瀹€鈧崰鏍€佸☉妯峰牚闁告劗鍋撳В澶嬩繆閻愵亜鈧垿宕曟繝姘闁跨噦鎷� (0) +1 闂傚倸鍊峰ù鍥х暦閸偅鍙忕€广儱鎷嬮崥瀣煕閳╁喚娈㈠ù纭锋嫹 (0) +1 闂傚倸鍊搁崐鎼佸磹閹间降鍋戦悗娑欋缚椤╂煡鏌i幋锝嗩棄缂佺媭鍨堕弻銊╂偆閸屾稑顏� (0) +1
闂傚倸鍊搁崐宄懊归崶顒€违闁逞屽墴閺屾稓鈧綆鍋呭畷宀勬煛瀹€鈧崰鏍€佸☉妯峰牚闁告劗鍋撳В澶嬩繆閻愵亜鈧垿宕曢弻銉ュ瀭闁秆勵殔閽冪喖鏌i弮鍥モ偓鈧柛瀣尭閳藉鈻嶉褌绨奸柟渚垮姂瀹曟儼顦柡鈧懞銉d簻闁哄洨鍋為ˉ鐐烘倵濮樼偓瀚�闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍡椾粡濡炪倖鍔х粻鎴犲閸ф鐓曢柟閭﹀灱閸ゅ鏌ら弶鎸庡仴闁哄本绋戦埥澶娾枎閹邦喚鈻忕紓鍌氬€风拋鏌ュ疾閻樿钃熼柣鏃傗拡閺佸秵绻濇繝鍌氭灓闁哄棭鍘奸—鍐Χ閸愩劌濮烽梺鐟板殩閹凤拷>>

正在阅读:VC++学习:字符串黑箱的背后VC++学习:字符串黑箱的背后

2004-03-01 10:18 出处:CSDN 作者:titilima 责任编辑:linjixiong

  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越走越慢的原因。

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
闂傚倸鍊搁崐椋庣矆娴h櫣绀婂┑鐘插€寸紓姘辨喐閺冨牄鈧線寮介鐐茶€垮┑锛勫仧缁垶寮悩缁樷拺闂侇偆鍋涢懟顖涙櫠閹绢喗鐓欐い鏃€顑欏ḿ鎰版煙瀹勭増鍤囩€规洏鍔嶇换婵嬪磼濞嗘劖鈻曟繝鐢靛Х椤h棄危閸涙潙纾婚柟鎹愵嚙缁狀垶鏌ㄩ悤鍌涘闂傚倸鍊搁崐鐑芥倿閿曞倸绠栭柛顐f礀绾惧潡鏌熼幆鐗堫棄缁惧墽绮换娑㈠箣濞嗗繒浠奸梺鍝勫閸庣敻骞冨鈧幃娆撳级閸喚褰戝┑鐐茬摠缁秶鍒掗幘璇茶摕婵炴垯鍩勯弫鍐煥濠靛棙顥犳い锔哄劦濮婃椽宕ㄦ繝鍐炬闂佺懓鍤栭幏锟�