当文本包含换行符时,JTextPane中的显着性能差异

时间:2014-12-04 21:48:33

标签: java performance jtextpane

我写了一个方法,在JTextPane中写入 hello world!\ n 10000次。我认出了一个 使用 hello world!时没有换行的显着性能下降。

示例:

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.text.*;

public class JTextPaneTest {
    JTextPane textPane = new JTextPane();
    Document doc = new DefaultStyledDocument();

    //constructor
    JTextPaneTest() {               
        for(int i=0;i<10000;i++) {
            try {
                doc.insertString(doc.getLength(), i+" hello world!", 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");
    }
}

这种现象可能是什么原因?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

StyledDocument有两级数据结构:段落(换行符!)和该元素。样式属性可以是段落或元素。

添加换行符可能意味着插入一个新的(空)段落。在每种情况下,都会发生更多事情,而不仅仅是元素插入。