問題があります。そこに東洋言語を使用すると、私のアプリケーションインターフェイスはかなり遅く動作します。特に私はJList、JCombobox、JTableなどのコンポーネントでそれを感じました。テキストにアラビア語またはペルシア語の文字がある場合、fontmetrics計算による文字列の幅が非常に遅い
テキストで少なくとも1文字がアラビア語またはペルシア語の場合、FontMetrics.stringWidthメソッドのパフォーマンスが非常に遅い(500回以上)ことがわかりました。どのように私はそれが一般的に様々なスイングのコンポーネントで使用される方法を知っています
このメソッドのパフォーマンスを向上させる方法はありますか?ペルシャのため
計算時間:5482ミリ英語
計算時間:11ミリ秒、それは次の出力を与える私にとって
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;
}
}
:ここ
は、問題を示すサンプルクラスです
しかし、最小500倍遅くキル性能:( – httpdispatch
はあなたが本当に何千ものメトリックを計算する必要がある場合にのみ。あなたは10を持っている場合は同意します画面上の行は重要ではありません:UIコントロールの描画にも時間がかかります。ソリューションが見つかったらここに投稿してください... – AlexR
解決策は太陽を書き換えてさらに置き換えることだと思います。 – httpdispatch