文字列出力エンコードの性能差比較

| | コメント(0) | トラックバック(0)

概要

プログラムからディスクやメモリ、ネットワーク上にテキストデータを書き出す際、明示的・暗黙的に文字コードが指定されている。
文字コードの種類によって、どのくらい性能差があるのかを測定した。

結論

ASCII 文字列のみの出力の場合、us-ascii, iso-8859-1 での出力が最も高速、UTF-8 もほぼ変わらない性能で出力できる。
日本語文字列の場合、UTF-8 が高速。

MS932, EUC-JP はいずれのケースでも、他の文字コードより性能が劣る。とくに EUC-JP はこれらの中で最も遅い。

調査1 - Windows で ASCII 文字列を出力

調査方法

次のプログラムのように、ascii 文字列を繰り返し、ByteArrayOutputStream に書き出し、実行時間を測定する。
public class Test1_2 {
	public static void main(String[] args) throws IOException {
		String s = "The quick brown fox jumps over the lazy dog";

		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			sb.append(s);
		}

		Charset charset = Charset.forName("iso-8859-1");

		long t = System.currentTimeMillis();

		for (int i = 0; i < 20000 * 80; i++) {
			doTest(s, charset);
		}

		long t2 = System.currentTimeMillis();
		System.out.println((t2 - t) + " msec");
	}

	private static void doTest(String s, Charset charset) throws IOException {
		OutputStreamWriter out = new OutputStreamWriter(
				new ByteArrayOutputStream(), charset);
		out.write(s);
		out.close();
	}
}

実行環境

  • PC: DELL Vostro 200
  • CPU: Core2Duo E8500 3.16GHz
  • OS: Windows XP Pro SP2

  • Java 6 update 6

測定結果

us-ascii, iso-8859-1, UTF-8, MS932, EUC-JP の順に高速だった。
ASCII 文字列の出力であるにもかかわらず、MS932, EUC-JP での出力は遅い。

なお、文字コードをしていない場合、Windows 環境のデフォルト値 MS932 が使用される。
Windows の場合、明示的に us-ascii や UTF-8 を指定したほうが高速化できる。

実行時間[msec] 文字コード
4374 us-ascii
4375 iso-8859-1
4531 UTF-8
5406 MS932
6954 EUC-JP

調査2 - Windows で 日本語文字列を出力

調査方法

調査1のプログラムにおいて、文字列を日本語に変更し、実行。
日本語出力のため、調査文字コードは UTF-8, MS932, EUC-JP とする。

測定結果

UTF-8 が最も高速に実行できた。Java 内部コードと同じ文字コードだけに、余計な手間がかかっていないのだろう。

実行時間[msec] 文字コード
4829 UTF-8
6359 MS932
7500 EUC-JP

調査3 - Linux で ASCII 文字列を出力

さきほどのプログラムを Linux 上で実行。

実行環境

  • PC: IBM Blade HS21 Model G6J
  • CPU: Xeon E5450 3GHz
  • OS: CentOS 5.2
  • kerne: 2.6.18-92.1.6.el5PAE
  • glibc: glibc-2.5-24

  • Java 6 update 6

測定結果

Widows と同様、us-ascii, iso-8859-1, UTF-8, MS932, EUC-JP の順に高速だった。

実行時間[msec] 文字コード
5960 us-ascii
5974 iso-8859-1
5999 UTF-8
6378 MS932
7503 EUC-JP

調査4 - Linux で 日本語文字列を出力

測定結果

Windows と同様の結果となった。

実行時間[msec] 文字コード
6093 UTF-8
6620 MS932
7503 EUC-JP

トラックバック(0)

このブログ記事を参照しているブログ一覧: 文字列出力エンコードの性能差比較

このブログ記事に対するトラックバックURL: http://trasis.jp/cgi-bin/mt/mt-tb.cgi/71

コメントする

2012年4月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30