簡體   English   中英

GraphStream渲染節點和邊緣變慢

[英]GraphStream rendering node and edges slow

我正在GraphStream上顯示數據庫中的數據。 但是它創建節點和邊緣非常慢。 我正在使用這個非常基本的示例。

這是我的代碼:

public class GraphExplore {
    static Connection conn2;
    static String result, result2;
    static JFrame frame;
    static JPanel panel;
    static int totalRows, i;

    public static void main(String args[]) throws SQLException {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    showData();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private static void showData() throws SQLException {

        frame = new JFrame("GRAPH TESTING");

        Graph graph = new SingleGraph("tutorial 1");
        graph.setAutoCreate(true);
        graph.setStrict(false);
        graph.display();

        try {
            Class.forName("org.h2.Driver");
            conn2 = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa");

        } catch (Exception e) {
            e.printStackTrace();
        }
        Statement stmt2 = conn2.createStatement();
        ResultSet rs = stmt2.executeQuery("SELECT count(*) FROM cdr");
        while (rs.next()) {
            totalRows = rs.getInt(1);
        }
        ResultSet rs2 = stmt2.executeQuery("SELECT ANUMBER,BNUMBER FROM CDR LIMIT 20");
        while (rs2.next()) {
            result = rs2.getString("ANUMBER");
            result2 = rs2.getString("BNUMBER");
            graph.addNode(result);
            graph.addNode(result2);
            for (i = 0; i < totalRows; i++)
                graph.addEdge("string" + i, result, result2);
        }

        for (Node node : graph) {
            node.addAttribute("ui.label", node.getId());
        }
        // graph.addAttribute("ui.stylesheet", "graph { fill-color: red; }");text-mode:
        // hidden;
        graph.addAttribute("ui.stylesheet", "node {size: 12px;fill-color: #ff0000;z-index: 0;}");
        graph.addAttribute("ui.stylesheet", "edge { shape:line ; fill-color: #222;}");
        conn2.close();
    }

}

現在,我僅使用20行,這需要3-4秒。 但是我需要一次顯示更多記錄(可能超過一百萬)。 誰能告訴我如何提高渲染速度?

這里只是一個瘋狂的猜測。 您是否嘗試過專門計時JDBC從查詢返回結果的時間? 我將從這里開始。 如果您發現查詢很快又回來了,那不是數據庫的問題。 如果是這樣,您可以考慮使用索引更快地返回結果。

如果查詢不是問題,則可以研究圖形功能。 我的猜測使我相信渲染很慢,因為將圖形設置為顯示,然后將節點和邊添加到圖形中,因此可以實時渲染。 開始渲染圖形之前,可以預加載節點和邊,從而減少繪制調用的次數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM