AnsiString学习之一,看到的是你想不到的。(C++Builder 6)

void __fastcall TMainForm::BtnAddOneClick(TObject *Sender)
{
 char Data[129];                                  // 数据缓冲区
 int  iBeginTime,                                 // 计时开始的TickCount
      iEndTime;                                   // 运算结束的TickCount
 AnsiString strResult;                            // 存放结果的累加字符串变量

 memset(Data, 'A', sizeof(Data)-1);               // 数据缓冲置为字符A
 Data[sizeof(Data)-1] = 0;                        // 数据缓冲末尾置NULL
 iBeginTime = GetTickCount();                     // 记录开始时间,豪秒
 for(int i=0;i<10000;i++)                         // 累加字符串10000次
   strResult += Data;
 iEndTime = GetTickCount();                       // 记录结束时间,豪秒

 // 显示运算时长,单位毫秒;三次结果分别为16812, 16750, 17656。
 ResultMemo->Lines->Add(IntToStr(iEndTime - iBeginTime));
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BtnAddTwoClick(TObject *Sender)
{
 char Data[129];                                  // 数据缓冲区
 int  iBeginTime,                                 // 计时开始的TickCount
      iEndTime;                                   // 运算结束的TickCount
 AnsiString strTemp;                              // 存放临时数据
 AnsiString strResult;                            // 存放结果的累加字符串变量

 memset(Data, 'A', sizeof(Data)-1);               // 数据缓冲置为字符A
 Data[sizeof(Data)-1] = 0;                        // 数据缓冲末尾置NULL
 strTemp = Data;                                  // 使用临时字符串变量
 iBeginTime = GetTickCount();                     // 记录开始时间,豪秒
 for(int i=0;i<10000;i++)                         // 累加字符串10000次
   strResult += strTemp;
 iEndTime = GetTickCount();                       // 记录结束时间,豪秒

 // 显示运算时长,单位毫秒;三次结果分别为15, 16, 16。
 ResultMemo->Lines->Add(IntToStr(iEndTime - iBeginTime));
}
//---------------------------------------------------------------------------

初步结论是AnsiString在底层实现时有很大的问题(特别是内存管理),正常情况下,前后两种方式累加不应有这么大的差异的。


解决办法:在项目里加上著名的内存管理器FastMM,经实测重新编译后速度相当,几乎没有区别。另外可以考虑升级系统到C++Builder2006/2007(据说内置了FastMM内存管理器),经测试已没有性能上的区大差别。

所以强烈建议朋友们如果还是用C++Builder 6及以前版本的系统开发应用,一率加上FastMM。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值