変換にかかる時間(その2)

漢字コードの変換にかかった時間(単位:秒)

入力コード 出力コード sjis euc jis utf8
sjis 2.57 19.39 29.82 53.11
euc 19.06 2.49 14.39 39.39
jis 29.94 15.21 2.58 49.59
utf8 65.41 50.92 60.75 2.58

今回もサンプルの実行はありません。

ミリ秒単位での速度比較の方法を知ったので、もう一度試してみました。ミリ秒単位だと、データとしてもそれっぽいです。

「jis」から「sjis」「euc」への変換は、逆の場合とそれほど変わらないみたいです。どうやら、前回は嘘を書いていたようです (^^;;;

しかし、測定のタイミングなのか「誤差」が結構あります。仕方の無い事なのでしょうか・・・。

今回使ったのは「Benchmark」というライブラリ(パッケージ?)で「ActivePerl519」に入っていました。とはいえ、その存在を知ったのは、とほほさんの「ラウンジ」なんですけど・・・。

他にも「times」という関数(?)で実行時間(?)が「ミリ秒」単位で取得できるようです。ただ、スクリプトの最初に書くと普段は「0000」なのですが、時々「0.05」などと言われる事があるので、どの瞬間からの時間なのかはよくわかりません。

ただ、便利なのは便利です。「time」で引き算をしても「0秒」ばかりだったので・・・。

そういえば、前回はわざわざ時刻に変換して計算をしていたけど、「time」は「グリニッジ標準時の1970年1月1日0時0分0秒」からの秒数を返すので、変換せずにそのまま引き算をすれば簡単に答えが出ていた・・・。「time」も計算できる事に何故気づかなかったのか(笑)

掲示板を作るために色々なスクリプトを参考していると、「なるほど」な事がたくさんあった。やはり「作る過程で習得する」のが性にあっているらしい。

ソースコード

 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl

use Benchmark;
use Jcode;

$count = 50000;

$icode = 'sjis';
# $icode = 'euc';
# $icode = 'jis';
# $icode = 'utf8';

$japanese = 'あいうえお阿衣兎得緒';
&Jcode::convert($japanese, $icode);

print "Content-type: text/html\n\n";
print "<html><head><title></title></head>\n";
print "<body>\n";
print "<pre>\n";

@t = timethese($count, {
    'to_SJIS' => '&to_sjis;',
    'to_EUC'  => '&to_euc;',
    'to_JIS'  => '&to_jis;',
#   'to_UTF8' => '&to_utf8;'
});

print "</pre>\n";
print "</body></html>\n";

exit(0);

sub to_sjis {
    &Jcode::convert($japanese, 'sjis', $icode);
}

sub to_euc {
    &Jcode::convert($japanese, 'euc', $icode);
}

sub to_jis {
    &Jcode::convert($japanese, 'jis', $icode);
}

sub to_utf8 {
    &Jcode::convert($japanese, 'utf8', $icode);
}
comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。