Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

2010年6月15日

StringArrayToString と VC

以下のコードで,VC のそれぞれのバージョン,32 ビット MBCS/UNICODE で約 1 M 文字の変換を計測
BOOL O_StringArrayToString(const CStringArray& strAry,CString& str,const CString& sp=_T("rn"))
{
  for (int lineCount=0 ; lineCount<strAry.GetSize() ; lineCount++) {
    str += strAry.GetAt(lineCount) ;
    if (str.Right(sp.GetLength()) != sp) {
      str += sp ;
      }
    }
  return TRUE ;
  }

    1+2
x 333,333
999,999 文字
10+2
x 83,333
999,996 文字
100+2
x 9,803
999,906 文字
1,000+2
x 998
999,996 文字
VC 6.0 MB 351.205 88.576 9.984 0.962
VC 7.0 MB 0.351 0.280 0.231 0.210
VC 7.1 MB 0.351 0.290 0.240 0.230
VC 8.0 MB 0.340 0.250 0.220 0.231
VC 9.0 MB 0.360 0.240 0.240 0.201
VC 10. MB 0.090 0.020 0.000 0.000
VC 6.0 WC 936.567 228.458 25.857 2.584
VC 7.0 WC 1.342 1.281 1.252 1.261
VC 7.1 WC 1.462 1.282 1.252 1.272
VC 8.0 WC 1.392 1.281 1.252 1.242
VC 9.0 WC 1.382 1.322 1.302 1.232
VC 10. WC 0.080 0.020 0.010 0.010


VC 10 は,ほとんど無視できる速度.
VC 7 ~ VC 9 は,UNICODE exe で少し時間がかかる.
VC 6 exe では,ループの回数にかなり影響を受ける
(恐らく領域の割り当ての関係と思われる).
また,CString のサイズが大きくなる(ループの lineCount が大きくなる)程,遅くなった.


綺麗なコードでないが,~ VC 9 の場合に置き換える
 
BOOL N_StringArrayToString(const CStringArray& strAry,CString& str,const CString& sp=_T("rn"))
{
  CStringArray tmpSA ;
  CString tmpStr ;
  for (int lineCount=0 ; lineCount<strAry.GetSize() ; lineCount++) {
    tmpStr += strAry.GetAt(lineCount) ;
    if (tmpStr.Right(sp.GetLength()) != sp) {
      tmpStr += sp ;
      }
    if ((lineCount%100-1) == 0) {
      tmpSA.Add(tmpStr) ;
      tmpStr.Empty() ;
      }
    }
  if (!tmpStr.IsEmpty()) {
    tmpSA.Add(tmpStr) ;
    }
  if (tmpSA.GetSize() > 1) {
    ::N_StringArrayToString(tmpSA,str,sp) ;
    }
  else if (tmpSA.GetSize() == 1) {
    str = tmpSA[0] ;
    }
  else {
    return FALSE ;
    }
  return TRUE ;
  }
 
…/Test/TsSAtoS.zip

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:


    top

    %d人のブロガーが「いいね」をつけました。