У меня есть массив String с приблизительно 10000 элементами текста, которые я хочу поместить в JTextPane. К сожалению, это слишком медленно, и у меня нет никаких идей о том, как повысить производительность. В частности, это занимает очень много времени, когда я использую китайские или арабские буквы/шрифты.Улучшение производительности JTextPane
Требуется ~ 20 секунд, чтобы загрузить каждый арабский текст из массива строк в текстовое поле на i5 @ 2Ghz.
Вот мой код:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.text.*;
public class JTextPaneTest {
private JTextPane textPane = new JTextPane();
Document doc = new DefaultStyledDocument();
private JPanel panel = new JPanel();
//constructor
JTextPaneTest() {
for(int i=0;i<10000;i++) {
try {
doc.insertString(doc.getLength(), i+" hello world!\n", null);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
textPane.setDocument(doc);
createWindow();
}
public void createWindow() {
JFrame frame = new JFrame();
frame = new JFrame("frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER);
frame.setVisible(true);
}
public static void main(String[] args) {
System.out.println("start...");
float startTime = System.nanoTime();
new JTextPaneTest();
float stopTime = System.nanoTime() - startTime;
System.out.println("elapsed time main: "+stopTime/1000000000+ "s");
}
}
В приведенном выше примере, я использовал "Привет, мир!" вместо строкового массива, чтобы сделать код более четким.
Как можно улучшить алгоритм? Любые альтернативные идеи?
Thanks
порядок, в котором содержание добавляется в TextPane Имеет ли значение? Если нет, вы можете рассмотреть многопоточный подход, если это возможно. –
@ Крис: да, порядок должен быть восходящим. – Ramses