2010-02-12 106 views
3

我们有一个基本上是两层应用程序的Java Swing应用程序 - 一个连接到数据库的UI层,它在两个层之间都有一些重要的工作。性能测试Swing应用程序

我们一直在观察应用程序的一些性能问题,并正在寻找加载测试应用程序的策略。

基本上我们的目标是启动该应用程序的多个实例并模拟一个负载,这将有助于我们在测试环境中找出这些性能条件。

我要找的建议对我们如何才能做到这一点:

  • ,你会推荐什么工具?
  • 途径(虚拟化?/思杰)

请让我知道如果你需要更多的信息来帮助你回答这个问题。

+0

@KM:你在大量使用JTable吗? – SyntaxT3rr0r 2010-02-12 21:44:13

+0

@ WizardOfOdds-是的,我们做!它是一个财务应用程序,由涉及大量计算和JTable的中层团队使用,广泛用于显示信息。 – 2010-02-12 22:21:28

+0

@KM:好吧,看我的回答然后:) – SyntaxT3rr0r 2010-02-12 23:07:04

回答

2

在开始为应用程序进行性能测试之前,应确保您遵循Swing应用程序的正确线程指导原则。将数据库访问保存在与GUI绘图不同的线程中非常重要。 See this link for more information

+0

@akf - 感谢您的回应! - 为了给你提供一些背景知识,我继承了这个应用程序,我的目标是找到最紧迫的问题并解决它们。 我的计划基本上是在应用程序中引入性能日志记录 - 我正在考虑在AOP中使用perf4j,然后将该应用程序的修改版本提供给实际用户,并从日志中找出瓶颈所在的位置。 我试图做的更长期的工作是给一个负载测试框架,这将帮助我确定更高负载的问题。 – 2010-02-12 22:28:32

0

当涉及到任何类型的测试(包括性能)时,在UI和业务逻辑分离时测试应用程序要容易得多。你提到你有一个用户界面,可以做一些繁重的工作,这通常不是一件好事。您希望能够使用API​​调用应用程序(使用UI调用的API)。

当使用UI测试整个应用程序的性能时,可以使用一些性能测试工具来帮助您。 JMeter是一个想到的,一些谷歌搜索肯定会找到其他人。

它确实使测试更容易模块化代码并分离出用户界面和业务代码,因此可以更轻松地隔离组件并确定性能瓶颈。如果大部分逻辑都在UI之外,那么也可以使用标准的Java分析器来查看大部分时间都花在哪里。

3

好的,我很确定你有JTable ....这可能是问题的一大部分。

但它是可以解决的,我不知道如何复制链接前面的回答我提出,但基本上是财务数据和JTable中,要仔细阅读以下...

太阳有一个教程正是为了这个目的,称为“圣诞树”,专门处理“经常更新的数据,如金融的”Swing/JTable慢度问题。

在这里你走“执行以及如何频繁地创建更新的JTable”:

http://java.sun.com/products/jfc/tsc/articles/ChristmasTree/

其中之一,我发现真的很神奇的是不断地显示所使用的内存的东西:你可能想去做。

您会惊讶于默认的JTable生成了多少不必要的垃圾,放慢了一切,并且更频繁地创建GC触发方式:无需创建对象,不必进行图形重绘等等。使得应用程序无法使用,即使在非常快速的设置中。

所以开始实施我给你的链接中给出的所有技巧,你会发现一切都会运行得更顺畅。我现在正在运行非常复杂和“不断更新”的JTable,现在一切都很好:)

基本上,除了最简单的情况和少量的数据之外,默认的JTable实现真的非常糟糕。

一旦你开始使用“真实世界的数据”(如财务资料),你需要按照这里列出的步骤,如果你想让你的JTable表现良好。

我并不是说这是你放慢速度的唯一原因,但我一直在那里实施大部分Sun在这篇文章中暗示的暗示大大的帮助。其实我从一个不能使用的应用程序变成了一个非常令人愉快的应用程序。

+0

另请参阅http://stackoverflow.com/questions/2219988/java-jtable-with-frequent-update/2220040#2220040 – trashgod 2010-02-13 04:48:51