2010-02-08 2 views
2

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

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

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

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

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

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

Энтони Si

+0

@ Энтони Си: в дополнение к моему ответу, я хотел бы указать, что частые события - это не единственная проблема. Ужасные, ужасно медленные игры по умолчанию JTable/header/cells (re) - огромная часть проблемы, с которой вы столкнулись, все это объясняется в ссылке, которую я дал вам в своем ответе. – SyntaxT3rr0r

ответ

6

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

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

Здесь вы идете, «Как создать часто обновляется JTable, которые работают хорошо»:

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

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

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

Затем начните реализацию всех трюков, указанных в ссылке, которую я вам дал, и вы увидите, что все должно работать много более плавное. Я сейчас запущен очень сложным и «постоянно обновляется» JTable, и теперь все в порядке :)

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

+0

@WizardOfOdds, спасибо за ссылку. Я считаю, что концепция пропуска невидимых ячеек очень умна, попытается реализовать эти трюки в моем приложении. –

 Смежные вопросы

  • Нет связанных вопросов^_^