orangesignal / orangesignal-csv

CSV (comma-separated values) read and write library for Java.
http://orangesignal.github.io/orangesignal-csv
Apache License 2.0
43 stars 22 forks source link

CsvReader performance tuning #22

Closed orangesignal closed 10 years ago

orangesignal commented 10 years ago

まだ GC 抑制の余地あり

など OrangeSignal CSVの場合、論理行単位に内部で行キャッシュしているので、cacheLine での更なる GC 抑制は効果が期待できる

orangesignal commented 10 years ago

cacheLine バッファの初期容量についてはopencsv なども同じ課題があったはずなので見てみるべし http://sourceforge.net/p/opencsv/code/HEAD/tree/trunk/src/au/com/bytecode/opencsv/CSVParser.java

INITIAL_READ_SIZE = 128

としているようだ

orangesignal commented 10 years ago

Super CSV http://sourceforge.net/p/supercsv/code/HEAD/tree/trunk/super-csv/src/main/java/org/supercsv/io/Tokenizer.java

Super CSV の場合は、

で新しいインスタンスを生成しないようにすることで GC 抑制しているようだ

orangesignal commented 10 years ago

memo

GC 回数が Super CSV よりやや多いのは "a","""b""b""\r\nb","c" pattern に対応するためにもう1つ行キャッシュを使用しているせい。これを最適化できれば(可能性低い?)、Super CSV よりは GC 回数を低下させられるはず。

読込み速度の問題はまた別のところ。全般的に if の多さだろうと推測

orangesignal commented 10 years ago

GC.calls 大幅低下。とりあえず Super CSV 以下の GC.calls となった

orangesignal commented 10 years ago

ken_all.csv read x 15 (JunitBenchmarks)

orangesignal commented 10 years ago

opencsv 並みに GC.calls を低下。読込み速度も若干の向上。機能過多であることや csv paradox 対応をはずせないのでこれ以上の速度向上はなかなか厳しい

orangesignal commented 10 years ago

今回は GC 回数低減を中心としたチューニングとして一旦終わりとします