PostgreSQL:EUC-SJIS変換処理の改善について(2)
euc_jp_and_sjis.patch (7Kbytes)
やはりEUCから直接SJISへ変換するほうが速いと考え,実装してみました。
(SJIS->EUCも実装しました)
パッチは以下のURLを参照してください。
測定結果は以下のとおりです。
実行したコマンド
time psql -f test.sql -o /dev/null
test.sqlの内容
set client_encoding to 'SJIS';
select * from accounts;
私の環境ではパッチ適用前:2.971s,パッチ適用後:2.342sとなり,実行速度が
約20%改善されました。
もしよければ,このパッチをコミットしていただけると,大変ありがたいです。
それから,mic_to_euc_jpの中でmic2sjisを実行しているのですが,これは
明らかにバグだと思い,このパッチで修正してあります。
テスト用プログラム
euc_sjis_test.c (13Kbytes)
このテストプログラム(euc_sjis_test)は,新旧両方の変換関数を実行するもので
使い方は以下のとおりです。
euc_sjis_test -orig|-new -euc2sjis|-sjis2euc < test_file > output_file
最初の引数は,-origか-newのいずれかで,-origは既存の変換処理,-newは新しい
変換処理を実行します。
2つ目の引数は,-euc2sjisか-sjis2eucのいずれかで,EUC->SJIS変換か SJIS->EUC
変換を指定します。
私が行ったテストは,以下のとおりです。
(1)EUCのテストデータ(euc.txt)を作成する
$ kanji > euc.txt
(solarisにはkanjiというコマンドがあって,これを実行するとEUCのコード表が
取得できます)
(2)euc.txtを新旧両方の変換処理でSJISへ変換し,変換結果を比較する
$ euc_sjis_test -orig -euc2sjis < euc.txt > sjis_orig.txt
$ euc_sjis_test -new -euc2sjis < euc.txt > sjis_new.txt
$ diff sjis_orig.txt sjis_new.txt
(3)SJIS->EUCも同様に,新旧両方の変換を行い,結果を比較する
$ euc_sjis_test -orig -sjis2euc < sjis_orig.txt > euc_orig.txt
$ euc_sjis_test -new -sjis2euc < sjis_orig.txt > euc_new.txt
$ diff euc_orig.txt euc_new.txt
これで,新しい関数が既存の関数と同じ結果を返すことを確認しました。