1

私のJava GUIアプリケーションには、繰り返しスケーリングする必要があるコンポーネントがいくつかあり、次のコードでこれを行っています:

Image newImage = myimage.getScaledInstance(width, height, Image.SCALE_REPLICATE);

ImageIcon newIcon = new ImageIcon(newImage);

this.setIcon(newIcon);

this.setSize(width,height);

//increment width, height

最初はこれで問題なく動作しますが、何度も (数百回) 繰り返した後、いくつかの単純な時間チェックに基づいて、新しい ImageIcon() コンストラクターに異常な時間がかかります (約 1 秒)。コードの残りの部分は高速です。

何度も繰り返した後にこれが発生するのはなぜですか? また、繰り返しが増えるにつれて速度が低下しないようにするにはどうすればよいですか? (画像の読み込みは一定時間の操作ではないため、バックグラウンド スレッドでの画像の読み込みは機能しません)。

4

2 に答える 2

2

The Perils of Image.getScaledInstance() をご覧ください。ここでは問題にならないかもしれませんが、別の方法を試すまでわかりません。

于 2011-04-17T22:15:22.680 に答える
0

以前の Q/A で、イメージの読み込みによってメモリの問題が発生したことを思い出しました。これはメモリリークであるという理論を追求する必要があると思います:

  • GC ロギングを有効にして JVM を実行し、これが問題であることを確認し、ログ メッセージと観測された速度低下の間に何らかの相関関係があるかどうかを確認します。(何らかの方法で確認するのに 1 分ほどかかるはずです。)

  • お気に入りのメモリ プロファイラを使用して、リークを追跡してみてください。

于 2011-04-17T23:13:12.270 に答える