我在 HPC 工作。我有一个小应用程序和一个 Java 客户端应用程序,它们jobID, jobname, userID, etc.
通过从我们的 TORQUE 作业调度程序接收到的信息显示有关在集群上运行的作业 () 的信息。
最近,我添加了按钮来按类别按升序或降序对数据进行排序。有了这个附加功能,用户可以通过对数据进行排序来强制更新显示(以前我有一个计时器,它每 10 秒从服务器接收一次新数据,然后更新显示),我注意到性能上的差异- 小程序明显滞后。输入计时代码,我发现应用程序平均需要 0.05 秒,setContentPane()
而小程序平均需要 1.50 秒才能使用相同的代码执行相同的操作。无论小程序是在 appletviewer 还是在浏览器中运行,这个问题都是一样的。
我想强调的是,几乎所有的代码都是一样的。唯一显着的区别是 JAppletsetContentPane()
对自己进行(和其他)调用,而我的应用程序对 JFrame 进行这些调用(例如frame.setContentPane()
)。
奇怪的是,对小程序的第一次调用会setContentPane()
在大约 0.13 秒内返回。但是,所有后续调用都需要前面提到的时间。
有什么建议么?我宁愿有一个功能正常的小程序,这样我就不必在我的用户社区上推送应用程序。
编辑:JApplet 的事件处理不是问题:关于鼠标移动和位置读取以及玻璃窗格上的弹出绘图的性能在 JApplet 和 Java 应用程序之间是相同的。
Edit2:我刚刚编辑了 JApplet 代码,因此会弹出一个 JFrame,其中运行着应用程序,并且性能与应用程序的性能相匹配!小程序有什么用?几周以来我一直在阅读它们,但没有人阐明这个问题 - 它几乎完全是“小程序不能在我的 linux 机器上的 Firefox 浏览器中运行”或“我如何将我的应用程序变成一个小程序”。没有人能告诉我为什么完全相同的 GUI 代码在 JApplet 中运行速度慢得离谱。也就是说,为什么 setContentPane() 在从 JFrame 创建的 JApplet 中有 30 倍的减速???
我运行小程序的原因是因为我希望它嵌入到网页中,弹出的 JFrame 太侵入性了。想法?
Edit3:在继续诊断此问题时,我发现 JApplet 对 setContentPane() 的调用使我的 CPU 使用率飙升至 60-100%。应用程序的 setContentPane() 并非如此,它只会从 0.1% 跳到 ~4%。是什么导致了 JApplet 的所有操作和性能开销?