Java JTable с частым обновлением? - PullRequest
2 голосов
/ 08 февраля 2010

Я кодирую JTable, способный обрабатывать частые обновления. Обычно этот JTable имеет ~ 1000 строк данных, и некоторые столбцы будут часто обновляться, потому что их значения выводятся из цены акций, которая сильно меняется в часы работы рынка.

Проблема, с которой я сталкиваюсь, заключается в том, что при обновлении большого количества строк (например, 80%) JTable становится очень медленным в течение 20-30 секунд или около того, что профилировщик показывает, что поток EDT очень занят, обрабатывая Таблица измененных звонков.

Я пытаюсь свернуть изменения 1) подавление fireTableCellUpdated 2) Если есть изменения <= 50 строк, вызовите fireTableRowUpdate для отдельных строк 3) Если имеется> 50 строк изменений, вызывается fireTableDataChanged для всей таблицы.

Это лучше, но все еще медленно, когда есть частые обновления, я понимаю, что fireTableDataChanged также медленный. Поэтому, если обновления данных происходят достаточно часто, fireTableDataChanged будет вызываться часто, а графический интерфейс будет ощущаться вялым.

Может ли кто-нибудь, имеющий опыт в этой области, порекомендовать наилучшую практику использования fireTableRowsUpdate, fireTableDataChanged и fireTableStructureChanged, чтобы улучшить живость и производительность графического интерфейса? Если у вас есть указатели на примеры кодов, которые решают эту проблему, это будет еще лучше.

Большое спасибо

Энтони Си

1 Ответ

7 голосов
/ 08 февраля 2010

Я так и сделал, и даже на сложных настройках стандартные JTable-скрипты ужасно плохи. Но вся надежда не потеряна: используя (довольно) несколько приемов, вы можете получить приемлемые результаты.

По сути, у Oracle есть учебное пособие именно для этой цели, которое называется "Рождественская елка".

Вот, пожалуйста, «Как создать часто обновляемый JTable, который хорошо работает»:

http://www.oracle.com/technetwork/java/christmastree-138396.html

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

Вы будете поражены тем, сколько ненужного дерьма генерируется JTable по умолчанию, замедляя все и делая, конечно, запуск GC чаще, чем следовало бы.

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

Но да, кроме простейшего случая и крошечных объемов данных, реализация JTable по умолчанию действительно ужасно плоха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...