私はHPCで働いています。jobID, jobname, userID, etc.
TORQUE ジョブ スケジューラから受信した情報を介して、クラスターで実行されているジョブ ( ) に関する情報を表示するアプレットと Java クライアント アプリケーションの両方があります。
最近、値の昇順または降順でカテゴリ別にデータを並べ替えるボタンを追加しました。この追加により、ユーザーはデータを並べ替えて表示を強制的に更新できるようになりました (以前は、サーバーから 10 秒ごとに新しいデータを受信し、その後表示を更新するタイマーがありました)。パフォーマンスの不一致に気付きました。 - アプレットが大幅に遅れました。タイミング コードを入力するsetContentPane()
と、同じコードで同じ操作を実行するのに、アプリケーションでは平均 0.05 秒、アプレットでは平均 1.50 秒かかることがわかりました。この問題は、アプレットがアプレット ビューアーまたはブラウザーで実行されている場合でも同じです。
事実上すべてのコードが同じであることを強調したいと思います。唯一の大きな違いは、JApplet がsetContentPane()
(およびその他の) 呼び出しを自分自身で行うのに対し、私のアプリケーションはこれらの呼び出しを JFrame で行うことです (例: frame.setContentPane()
)。
不思議なことに、アプレットの最初の呼び出しsetContentPane()
は約 0.13 秒で返されます。ただし、後続のすべての呼び出しには、前述の時間が必要です。
助言がありますか?ユーザー コミュニティでアプリケーションをプッシュする必要がないように、機能するアプレットがあればよいのです。
編集: JApplet のイベント処理は問題ではありません。マウスの動きと位置の読み取り、およびガラス ペインでのポップアップ描画に関するパフォーマンスは、JApplet と Java アプリケーションで同じです。
Edit2: JApplet コードを編集したところ、内部でアプリケーションが実行されている状態で JFrame がポップアップし、パフォーマンスがアプリケーションのパフォーマンスと一致するようになりました。アプレットとは?私は何週間もそれらについて読んでいますが、誰もこの問題に光を当てていません.ほとんどの場合、「LinuxボックスのFirefoxブラウザでアプレットが実行されない」または「アプリケーションをアプレットに変換するにはどうすればよいですか」. 文字通り同一の同じ GUI コードが、JApplet 内で途方もなく遅く実行される理由は誰にもわかりません。つまり、JFrame から作成された JApplet で setContentPane() が 30 倍遅くなるのはなぜですか?
私がアプレットを実行している理由は、それを Web ページに埋め込みたいからです。ポップアップ JFrame は邪魔すぎます。考え?
Edit3: この問題の診断を続ける中で、JApplet による setContentPane() の呼び出しにより、CPU 使用率が 60 ~ 100% の範囲で急上昇することがわかりました。これは、アプリケーションの setContentPane() には当てはまりません。0.1% から 4% までしかジャンプしません。JApplet の運用およびパフォーマンスに負担をかけるオーバーヘッドの原因は何ですか?