织梦CMS - 轻松建站从此开始!

罗索

编程问题之外的思考

jackyhwei 发布于 2010-08-04 13:15 点击:次 
最近在Windows Mobile平台上做一款软件,在解析资讯文本的时候,发现速度奇慢无比,在使用新的方法之后,资讯文本内容的解析速度大为提升,或许这并不是技术上的问题,而是愿意不愿意多思考的问题!
TAG:

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

  1. SplitCString(iszString,*strArray,L"\n");  
  2. for(int j = 0;j < strArray->GetSize();j++)  
  3. {  
  4. splitStr = strArray->GetAt(j);  
  5. for(int i = 0;i < strArray->GetAt(j).GetLength();i++)  
  6. {  
  7. STOCKRANGE inforDetailContent;  
  8. currentWid++;  
  9. textsize = GetDC()->GetTextExtent(splitStr.LeftcurrentWid));  
  10. if(textsize.cx > lineWidth)  
  11. {  
  12. inforDetailContent.stockCode = splitStr.Left(currentWid);  
  13. splitStr = splitStr.Right(splitStr.GetLength()-currentWid);  
  14. inforDetailContent.decimalNumber = ++wordNumber;  
  15. StockRangeData.push_back(inforDetailContent);  
  16. currentWid = 0;  
  17. textsize.SetSize(0,0);  
  18. continue;  
  19. }else if(currentWid == splitStr.GetLength())  
  20. {  
  21. inforDetailContent.stockCode = splitStr;  
  22. inforDetailContent.decimalNumber = ++wordNumber;  
  23. StockRangeData.push_back(inforDetailContent);  
  24. STOCKRANGE blankContent;  
  25. blankContent.stockCode = L"";  
  26. blankContent.decimalNumber = ++wordNumber;  
  27. StockRangeData.push_back(blankContent);  
  28. currentWid = 0;  
  29. textsize.SetSize(0,0);  
  30. break;  
  31. }  
  32. }  
  33. }  
  34. delete strArray;  
  35. strArray = NULL; 

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

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

  1. SplitCString(iszString,*strArray,L"\n");  
  2.  
  3. textsize = GetDC()->GetTextExtent(L"股");  
  4. int textNumber = lineWidth/textsize.cx;  
  5. for(int j = 0;j < strArray->GetSize();j++)  
  6. {  
  7. splitStr = strArray->GetAt(j);  
  8. int columeNumber = splitStr.GetLength()/textNumber+
  9. ((splitStr.GetLength()%textNumber)>0?1:0);  
  10. if(columeNumber == 0)  
  11. {  
  12. STOCKRANGE inforDetailContent;  
  13. inforDetailContent.stockCode = splitStr;  
  14. inforDetailContent.decimalNumber = ++wordNumber;  
  15. StockRangeData.push_back(inforDetailContent);  
  16.    
  17. STOCKRANGE blankContent;  
  18. blankContent.stockCode = L"";  
  19. blankContent.decimalNumber = ++wordNumber;  
  20. StockRangeData.push_back(blankContent);  
  21. continue;  
  22. }else 
  23. {  
  24. for(int i = 0;i < columeNumber;i++)  
  25. {  
  26. STOCKRANGE inforDetailContent;  
  27. if(splitStr.GetLength() > textNumber)  
  28. {  
  29. inforDetailContent.stockCode = splitStr.Left(textNumber);  
  30. splitStr = splitStr.Right(splitStr.GetLength()-textNumber);  
  31. inforDetailContent.decimalNumber = ++wordNumber;  
  32. StockRangeData.push_back(inforDetailContent);  
  33. }else 
  34. {  
  35. inforDetailContent.stockCode = splitStr;  
  36. inforDetailContent.decimalNumber = ++wordNumber;  
  37. StockRangeData.push_back(inforDetailContent);  
  38.    
  39. STOCKRANGE blankContent;  
  40. blankContent.stockCode = L"";  
  41. blankContent.decimalNumber = ++wordNumber;  
  42. StockRangeData.push_back(blankContent);  
  43. }  
  44. continue;  
  45. }  
  46. }  
  47. }     

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

(dongfengsun)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201008/9929.html]
本文出处:CSDN博客 作者:dongfengsun
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容