编程问题之外的思考

       最近在Windows Mobile平台上做一款软件,在解析资讯文本的时候,发现速度奇慢无比,代码是这样写的:

SplitCString(iszString,*strArray,L"/n");

for(int j = 0;j < strArray->GetSize();j++)

{

splitStr = strArray->GetAt(j);

for(int i = 0;i < strArray->GetAt(j).GetLength();i++)

{

STOCKRANGE inforDetailContent;

currentWid++;

textsize = GetDC()->GetTextExtent(splitStr.Left(currentWid));

if(textsize.cx > lineWidth)

{

inforDetailContent.stockCode = splitStr.Left(currentWid);

splitStr = splitStr.Right(splitStr.GetLength()-currentWid);

inforDetailContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(inforDetailContent);

currentWid = 0;

textsize.SetSize(0,0);

continue;

}else if(currentWid == splitStr.GetLength())

{

inforDetailContent.stockCode = splitStr;

inforDetailContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(inforDetailContent);

STOCKRANGE blankContent;

blankContent.stockCode = L"";

blankContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(blankContent);

currentWid = 0;

textsize.SetSize(0,0);

break;

}

}

}

delete strArray;

strArray = NULL;

       作为Windows Mobile开发的人都知道,对绘图句柄进行GetTextExtent()操作是很影响效率的,那么是否有必要对每一个字符遍历并求出字符在设备上占用的尺寸?这和多数人抱怨Android平台的不兼容性是一样的,既然Android平台不同版本之间的兼容性差,那么为什么程序员还要依赖于具体某个平台进行编程呢?Android程序员有义务跨平台进行Android应用程序的开发并保证代码的兼容性。

       那么上面的代码既然知道GetTextExtent()方法的效率低下,是否可以尽量不用或者少用这个方法获取字符的尺寸?看看下面新写的方法:

SplitCString(iszString,*strArray,L"/n");

 

textsize = GetDC()->GetTextExtent(L"");

int textNumber = lineWidth/textsize.cx;

for(int j = 0;j < strArray->GetSize();j++)

{

splitStr = strArray->GetAt(j);

int columeNumber = splitStr.GetLength()/textNumber+((splitStr.GetLength()%textNumber)>0?1:0);

if(columeNumber == 0)

{

STOCKRANGE inforDetailContent;

inforDetailContent.stockCode = splitStr;

inforDetailContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(inforDetailContent);

 

STOCKRANGE blankContent;

blankContent.stockCode = L"";

blankContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(blankContent);

continue;

}else

{

for(int i = 0;i < columeNumber;i++)

{

STOCKRANGE inforDetailContent;

if(splitStr.GetLength() > textNumber)

{

inforDetailContent.stockCode = splitStr.Left(textNumber);

splitStr = splitStr.Right(splitStr.GetLength()-textNumber);

inforDetailContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(inforDetailContent);

}else

{

inforDetailContent.stockCode = splitStr;

inforDetailContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(inforDetailContent);

 

STOCKRANGE blankContent;

blankContent.stockCode = L"";

blankContent.decimalNumber = ++wordNumber;

StockRangeData.push_back(blankContent);

}

continue;

}

}

}

       在使用新的方法之后,资讯文本内容的解析速度大为提升,或许这并不是技术上的问题,而是愿意不愿意多思考的问题!

 

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值