Mail: Pass:
前月  2008年2月  翌月
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

links

 びびすけさんのページ
 体重・走距離分析
 月間・靴・コース走距離
 タイムトライアル分析
 速度・心拍数分析
 自転車・月間・コース走距離
 オセロ勝敗・レート分析
 ViVi web site

新着日記

 zLib
 ViVi 2.x リリースチェック時間統計
 趣味悠々
 ViVi version 3.0 M-2 進捗
 ViVi週間DL数
 ViVi 3.0 開発方針
 記録更新
 ViVi 2.04 (RC版) リリース
 本サイトのアクセス数統計
 ViVi version 3.0 マイルストーン…
 ViVi ver 3 マイルストーン1 進…
 フォント選択可能@V3
 ViVi version 3.0 タスクリスト・…
 CycleCollection in リファレンス…
 循環参照検出(cycle detect)
 循環参照によるメモリリーク (2)

新着コメント

 おお/びびすけ
 再放送/川瀬
 アップ/びびすけ
 あーー!/スパイダーマン
 放映/びびすけ
 どもども/びびすけ
 必見だぁ^^/oyaji_aoba
 おおー!/スパイダーマン
 補足/びびすけ
 HGP行書体/びびすけ

トラックバック

トラックバックはありません。

カテゴリ一覧

 基本データ
 テニス
 ジョギング
 ViVi
 自転車
 Web
 RunRunDietOnline
 PostgreSQL
 ビルドアップ走
 ランニング

object_pool を使用した行管理クラス (2008/02/26 13:24)

object_pool がかなり高速で簡単に使用できるので、テキストエディタの行管理クラスに使用して、パフォーマンスを測定してみることにした。
双方向リンクと CString をメンバに持つ CLineNode を双方向リンクで保持する CLineMgr を定義し、1万行のテキストを生成し、
行管理オブジェクトに追加する処理の時間を計測してみた(@VC6 リリースモード, C2D 3GHz, Mem2G, WinXP)

[1] 固定文字列を追加する場合:0.781ミリ秒
[2] 行ごとに異なる文字列を追加する場合:5.125ミリ秒
ちなみに、[3] 行ごとに異なる文字列を生成するだけの場合:3.406ミリ秒
(ソースコードは こちら


ちなみに、object_pool を使用しない場合の結果は以下のとおり
[1] 固定文字列を追加する場合:10.531ミリ秒
[2] 行ごとに異なる文字列を追加する場合:26.407ミリ秒
[3] 行ごとに異なる文字列を生成するだけの場合:3.442ミリ秒

object_pool を使用すると約10倍高速になっていることがわかる


コメント:

パス ← 半角英字で「abc」と入力してください。
名前
タイトル
コメント

コメント:

4: 旧開発マシンの場合 (びびすけ 2008/02/26 22:54)

旧開発マシン(Athlon 64 2.5GHz, 1GMem, WinXP, VC6)の場合

[1] 固定文字列を追加する場合:1.593ミリ秒
[2] 行ごとに異なる文字列を追加する場合:11.969ミリ秒
[3] 行ごとに異なる文字列を生成するだけの場合:7.203ミリ秒
[4] 100文字(含む改行)*1万行の追加:6.422ミリ秒
[5] 50メガ(40万行)の読み込み:290.31ミリ秒
[6] ViViでの読み込み:0.8〜1秒


3: 50メガ(40万行)の読み込み (びびすけ 2008/02/26 19:54)

メモリバッファを用いる版を用いて、約50メガ(約40万行)のアパッチエラーログファイルを読み込むプログラムを作成し、
処理時間を計測してみた。
結果は 136.09ミリ秒 だった
(同じファイルを ViVi 2.01.96 で読み込むと 約160ミリ秒かかる)

2: list<CString>, vector<CString> (びびすけ 2008/02/26 19:11)

念のために同じ条件(固定文字列、1万行追加)で list<CString>, vector<CString> でも時間を計測した
list<CString> : 223.4ミリ秒
vector<CString> : 1.442ミリ秒

list<CString> の遅さは異常だ。なぜだろう・・・

1: メモリバッファを与える場合 (びびすけ 2008/02/26 17:10)

↑のソースでは各行の文字列を CString で与えないと行管理オブジェクトに渡すことができない。
ファイルを読み込む場合など、プレーンなメモリにいったん読み込まれるので、
その中から行単位に CString オブジェクトを生成するのは時間の無駄である。
そこで、プレーンなメモリバッファを引数にとり、その内容を行に切り分けて内部バッファに追加する版を作成し、処理時間を計測してみた。
結果は以下のとおり:

[4] 100文字(含む改行)*1万行の追加:2.422ミリ秒

100文字*1万行ということは1メガのファイルということなので、
処理時間が線形だとすれば100メガのファイルも 0.24秒程度で処理できることになる。
ほんとうにそうなのか後で計測してみることにする

( page views in recent 7 days)

パスワード忘れ
今週のランキング
計算タマちゃん
FAQ
ヘルプ
about rrdOnline