« ネットワークカード購入 | トップページ | CPU 数割り当て »

2013年4月 1日 (月)

大量カルテの読み込み対策

カルテが段々増えてきて,カルテ(DocumentModel)を selectAll した場合,読み込みに時間がかかることが多くなってきた。クエリの工夫CPU のアップグレード等,サーバ側でできる工夫はほぼ出つくしたと思われ,また,クライアント側でも,カルテのレンダリング時間がかなりかかってしまうようになった。これから DocumentModel はもっと増えると考えられるので対策が必要である。

 そこで, 根本的な対策として,DocumentModel を少しずつ読み込みながら表示していく方式をプログラムしてみた。これまでは,必要な DocumentModel を全部読んでから表示するようにしていたため,サーバからカルテ読み込み→レンダリング→表示の処理中はカルテ操作不能で,表示されるまで待つしか無かった。今回,SwingWorker を使って,DocumentModel を10件ずつ読んできてはレンダリングして,というのを繰り返すようにしてみた。これならいくら DocumentModel が増えても,最初の 10件を読み込んでレンダリングした時点で表示開始するので,カルテ表示まで待たされることが無くなる。

Kartedocumentviewer2

Kartedocumentviewer1

SelectAll で 173件の DocumentModel を全選択したところ。1秒くらいでカルテが表示されて操作可能になる。プログレスバーを見ると,読み込みはまだ始まったばかりであることが分かる。 プログレスバーを見ると,引き続き読み込み中であることが分かるが,少し重いながらスクロールもできるし,カルテを編集したり,文書履歴をクリックして選択を変更することもできる。

scrollerPanel に KarteViewer のパネルを加えると,JViewport が勝手に viewportView を最後までスクロールしてしまう現象でかなり悩んだ。最終的にはスタックトレースを取って,勝手に setViewPosition してくるメソッドを調べ,DefaultCaret#adjustVisibility が犯人であることを突き止めた。これをもとにググったところ,同じく悩んだ人の記事が見つかり,これを参考に workaround して解決した。

« ネットワークカード購入 | トップページ | CPU 数割り当て »

OpenDolphin」カテゴリの記事