下面来看看我对这方面的实际应用的结果对比
一。首先明确下,什么时候用drawChar,什么时候用drawString
当String 的内容不多的时候,drawChar跟drawString是差不多的。下面看看代码吧。
//看看这段代码跟下面那段代码的性能比较,发现如果采用这段代码性能比下面那段代码要搞3倍
IR!V \CRp?-A3 StringBuffer sb = new StringBuffer();
!pa r8fPX5w%[2u o3 for(int i=0; i<chars.length; i++){
l@-s$n.Z9J3 int fontWidth = font.charWidth(chars[i]);3G视线 y x(aV1c,?,|7zu
width += font.charWidth(chars[i]);
G yc\W,Jw3 if(width >= Platform.WIDTH - font.charWidth(chars[i]) - 6){3G视线 }.A D[Q\u(P
width = 0;3G视线R5Ay)ou9Vj]
startX = 0;
L1lg Wf O{&p$?3 startY += this.font.getHeight() + Part.SPACE;3G视线)u?v6z0s;s` g^
sb.append(chars[i]);3G视线2e_p;|#p%r(J*T]i
g.drawString(sb.toString(), startX, startY, Graphics.TOP|Graphics.LEFT);
sb = null; sb = new StringBuffer();
2b Ou{l$f5?5@3 }else{
n__*?dhN3 sb.append(chars[i]);3G视线t3|||Sb
startX += fontWidth;
z9Y$mXA)]C`)f3 }
3G视线$j{UNV,T qI;_
}
//这段代码有很大的性能问题啊,一个一个字的描绘出来是很消耗时间跟内存的
Q4x Jf5G%~g2x%R3 // for(int i=0; i<chars.length; i++){3G视线+E5\)j1t/X*D$c
// g.drawChar(chars[i], startX, startY, Graphics.TOP|Graphics.LEFT);
c#b.Dc7w3// int fontWidth = font.charWidth(chars[i]);3G视线BF,[@Fu]$zl
// width += font.charWidth(chars[i]);3G视线/x XC+wh }.gv
// if(width >= Platform.WIDTH - font.charWidth(chars[i]) - 4){3G视线4PI\8ut Qz E
// width = 0;3G视线*S?0A-Hk@r[n s+?
// startX = 0;3G视线l}y*W,B {4WD
// startY += this.font.getHeight() + Part.SPACE;3G视线k^W"Ii0S
// }else
&q(b#azR3F3// startX += fontWidth ;
&z ex]!vm4d [~3//
X'fm Fi2`3// }
'EF(f1~#BQ#s6B9f3这两段代码,,屏蔽的一段代码执行时间是400毫秒,上面的一段是170毫秒,而且是字符串不长的情况,如果是很长,那就太慢了。