Загрузка ImageIcon становится все медленнее и медленнее - PullRequest
1 голос
/ 17 апреля 2011

В моем java-приложении с графическим интерфейсом есть компоненты, которые необходимо масштабировать несколько раз, и я делаю это с помощью следующего кода:

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 секунды), основываясь на некоторых простых проверках времени. Остальная часть кода является быстрой.

Почему это происходит после многих итераций, и как я могу остановить замедление при увеличении итераций? (Загрузка изображений в фоновом потоке не будет работать, поскольку загрузка изображений не является операцией с постоянным временем).

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Взгляните на Опасности Image.getScaledInstance () .Это может не быть проблемой здесь, но вы не узнаете, пока не попробуете альтернативы.

0 голосов
/ 18 апреля 2011

Я помню предыдущие вопросы и ответы, когда загрузка изображений приводила к проблемам с памятью. Я думаю, что вам нужно придерживаться теории, что это утечка памяти:

  • Подтвердите, что это проблема, запустив JVM с включенным ведением журнала GC, и посмотрите, есть ли некоторая корреляция между сообщениями журнала и наблюдаемым замедлением. (Требуется минута или около того, чтобы подтвердить, так или иначе.)

  • Используйте свой любимый профилировщик памяти, чтобы попытаться отследить утечку.

...