我有个问题。如果我在那里使用东方语言,我的应用程序界面会慢得多。尤其是在 JList、JCombobox、JTable 等组件中我感受到了。
如果在文本中至少有一个字母是阿拉伯语或波斯语,我如何发现 FontMetrics.stringWidth 方法的性能非常慢(500 多次)。我怎么知道它是各种摆动组件中常用的方法。
有没有办法提高这种方法的性能?
这是演示问题的示例类:
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
public class FontMetricsSpeedTest
{
public static void main( String args[] ) {
String persian="صصصصصصصصصصصصصصصصصصصصص";
String english="abcde()agjklj;lkjelwk";
FontMetrics fm=createFontMetrics(new Font("dialog",Font.PLAIN,12));
int size=50000;
long start=System.currentTimeMillis();
for(int i=0;i<size;i++)
{
fm.stringWidth(persian);
}
System.out.println("Calculation time for persian: "+(System.currentTimeMillis()-start)+" ms");
start=System.currentTimeMillis();
for(int i=0;i<size;i++)
{
fm.stringWidth(english);
}
System.out.println("Calculation time for english: "+(System.currentTimeMillis()-start)+" ms");
}
private static FontMetrics createFontMetrics(Font font)
{
BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = bi.getGraphics();
FontMetrics fm = g.getFontMetrics(font);
g.dispose();
bi = null;
return fm;
}
}
对我来说,它给出了下一个输出:
波斯语的计算时间:5482 ms
英文计算时间:11 ms