您好我正在使用java swing来制作从GUI获取数据的java GUI应用程序,然后将每行放入JLabel并将其添加到某个Jpanel。
我的问题是,当我获取超过4k行时,应用程序需要0.3分钟才能完成上述过程,并且随着行数的增加时间会增加。
我计算了mysql的延迟,每60k行的时间为20.26秒,当我为应用程序计算时,对于相同数量的行,它几乎是2.5分钟。
所以我的问题是有什么可以加速我的应用程序(mysql,java)。
答案 0 :(得分:5)
从mysql中获取数据,然后将每行放入JLabel并添加 这对某些Jpanel来说。
JTable
,搜索ResultSetTableModel
,TableFromDatabase
我的问题是,当我获取超过4k行时,应用需要0.3分钟 让上面的过程完成,时间随着数量的增加而增加 行增加了。
4k
超出了人们在标准工作时间内使用大量数据的能力我计算了mysql的延迟,每60k就是20.26秒 行和当我为应用程序计算时,它几乎是2.5分钟 相同数量的行。
创建批处理逻辑,从ResultSet
运行SwingWorker
,publish()
每100rows
运行ResultSetTableModel
,TableFromDatabase
,然后运行用户可以看到第一个100row非常立即,其余的行是从Swing Worker管理的工作线程中添加的
简单易行,可以将一个巨大的查询拆分为一组查询,使用分页创建SQL查询,
答案 1 :(得分:3)
对象创建是一个昂贵的过程。我建议不要为从数据库中提取的每个字段创建单独的标签。你选择不使用JTable / TableModel有什么理由吗?看起来这将是表示数据库中数据表的最佳工具。有很多关于如何在网络上使用JTable的例子,所以我不会在这里描述。
作为确定JLabel创建是否对您的问题做出贡献的实验,请为每个行创建一个标签,而不是每个字段创建一个JLabel,并查看改进的程度。
如果需要立即响应,我还是第二个mKorbel建议批量处理的事情。这使您可以在查询和呈现其余信息时为用户提供一些即时数据。
这适用于您的大型数据集,前提是用户在做出决策或得出所需结论之前不需要所有信息(即 - 解决导致他们首先查询的问题)。如果是这种情况,繁忙的指标可能是最好的。
祝你好运!