2008年01月31日

SQLite性能評価まとめ

SQLite3.4.2の性能について調べた結果をまとめておきます。 調べたのはデータ追加(INSERT)のパフォーマンスです。テーブルに100000件のデータを追加した時の処理時間を測りました。

上記の記事のポイントを以下に列挙します。

  • 大量のデータをINSERTするときに、トランザクションを明示的に指定(BEGINとEND)すると、1500倍速くなる。
  • sqlite3_prepareとsqlite3_stepを使ってINSERT処理を最適化すると、最適化しない場合より2.2~2.3倍速くなる。
  • インメモリデータベースは、ファイルデータベースに比べて1.4~2.5倍速い。
  • C++標準ライブラリコンテナは、インメモリデータベースより6倍速い。

以上、おしまい。 考察はパスで。

2008年01月27日

SQLite性能評価その5

SQLite性能評価その4」の続きです。 SQLiteインメモリデータベースと、C++標準ライブラリのコンテナの性能を比較してみることにします。
ややこしい処理を何もしていない分C++標準ライブラリの方が圧倒的に速そうですが、実際のところはどうでしょうか。

測定環境

測定環境は前と変わっていませんが、もう一度書いておきます。

コンパイラVisual C++.NET 2003デフォルトコンパイラ
OSWindows XP Professional SP2
CPUAMD Athlon 64 3700+
メモリ2GB
HDDSeagate ST3300622AS
プロジェクト設定デフォルトRelease構成
SQLiteバージョン3.4.2 (not define THREADSAFE)
boostバージョン1.33.1

インメモリデータベースvsC++標準ライブラリコンテナ

インメモリデータベースのコードは、前回最速だったCase5を使用します。

C++標準ライブラリのコンテナを使ったコードは以下の通りです。これをCase6とします。 std::listを使いました。おまけでboostも使いました(標準ライブラリ相当ということで・・・)

std::list<boost::tuple<std::string, int> > Database;
// 処理時間測定開始
for (int i = 0; i < 100000; ++i) {
  Database.push_back(boost::make_tuple(StringList[i], ValueList[i]));
}
// 処理時間測定終了

測定結果

測定結果は以下のようになりました。
処理時間

C++標準ライブラリのコンテナを使った方が6倍速いです。結構な差だとは思いますが、桁が違うところまでは行かないんですね。 SQLite大健闘ではないかと思います。

2008年01月24日

boost1.34.1インストール(Visual C++.NET 2003)

Visual C++.NET 2003用にboost 1.34.1ライブラリをビルドしてみました。 結構手間でしたのでやり方をメモしておきます。
以下のサイトを参考にしました。

Visual Studio.NET 2003 Service Pack 1インストール

最初に開発環境をサービスパックをインストールする必要があります。
入手先:
Microsoft Visual Studio.NET 2003 Service Pack 1
インストールするためにはVisual Studio.NET 2003のDisc1が必要でした。
またインストール後には再起動が要求されました。

このアップデートを行わずに、boost 1.34.1をビルドしようとすると、以下のエラーに出会います。
Buffer overrun detected!
Visual C++.NET 2003のバグのようです。

boost 入手

boost_1_34_1.zipとboost-jam-3.1.16-1-ntx86.zipを入手して展開します。
入手先:Boost C++ Libraries

boost-jam-3.1.16-1-ntx86.zipを展開してできたbjam.exeを、boost_1_34_1.zip展開先のproject-root.jamと同じディレクトリ(以下boostルート)に置きます。

boost ビルド

コマンドプロンプトを立ち上げ、カレントディレクトリを(boostルート)に変更します。

cd (boostルート)

Visual C++.NET 2003環境設定用バッチファイルを実行します。
バッチファイルがあるパスは環境によって異なるでしょう。私は以下のパスにありました。

"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat"

boost 1.34.1ライブラリをビルドします。

bjam --toolset=msvc --stagedir=. stage
--toolset=msvc-7.1でも上手くいくようです。--toolset=msvc-7_1ではauto-linkingが失敗するライブラリファイルが生成されました。良く分かりません。 --toolset=msvcが無難だと思います。

文字化けメッセージがたくさん出ましたが、なんとか完了したようです。 ビルド完了

Visual C++.NET 2003ディレクトリ設定

最後にVisual C++.NET 2003ののディレクトリ設定を変更します。
ツール→オプション→プロジェクト→VC++ディレクトリ から、
インクルード ファイルに(boostルート)
ライブラリ ファイルに(boostルート)\lib
を追加しましょう。

以上で完了です。お疲れ様でした。

2008年01月14日

フォトビューアiPod touch

Apple iPod touch 16GB MA627J/A」という汎用AV機器を音楽プレイヤー&フォトビューアとしてしばらく使ってみましたので、感想を書いておきます。
iPod touch 化粧箱
化粧箱は結構小さいものでした(SDカードは大きさ比較用)。
iPod touch
本体は驚きの薄さです。

音楽プレイヤー

音楽プレイヤーとしては普通です。
音楽再生I/Fが、90度や270度回転には対応しているのに180度回転に対応できていないことや、 リピート再生ができないこと、音を止めるのに若干結構手間がかかるところなど、若干不便なI/Fですが、 反応はとてもスムーズであり、ひどいと言えるI/Fでもありません。普通です。

フォトビューア

フォトビューアとしては優れたI/Fを持っていて、なかなか良い感じのビューアです。
iPod touchを知った人に対して使うと 「iPod touchはフォトビューワとしては機能しない。」 というトラップに引っ掛かっていまいちです。「写真だけ?」なんて言われることもありました。
iPod touchを知らない人であれば、アルバムのページを捲るような感じで画面を擦ると次の写真が見れますので、 アルバム感覚で馴染める不思議なビューアです。
音楽プレイヤーと同じく反応がスムーズです。「待たされる」と感じることが無いですね。 2.6GB分の画像を転送しても、713MB(約1/4)しか容量を使いませんので、 iPod touch前に画像を加工して解像度を落とし、パフォーマンスを確保しているのでしょう。
そのためか、画像を拡大したときの画質は良くありません。パソコンのディスプレイの等倍表示には遠く及びません。 マクロレンズ+1000万画素一眼レフで昆虫を毛までばっちり撮って、良く見て下さいふさふさです凄いでしょうというのは難しいお話のようです。拡大したら毛が潰れてしまいます。 ちょっと残念ですが、操作性と引き換えということで我慢することにします。拡大画質以外は文句ありませんので。

その他の機能

その他の機能も、使ったものは感想を書いておきます。
電卓は、低機能ですが、画面が広い分、携帯電話の電卓より使いやすいので、割り勘のときに便利です。
ストップウォッチはプレゼンの発表時間を測るのに便利だったりします。ストップウォッチ使用中にロックするのは勘弁して欲しいとは思いましたが。
アラームはイヤホンから音がでるものであり、本体内蔵スピーカーからでるものではiPod用スピーカを寝室に備えている人じゃないと使い物にならなさそうです。
ビデオやブラウザは使ったことがないので分かりません。使う予定もありません。

安定性

安定性は若干不安があります。
二ヶ月半ほど使ったところ、2回突然シャットダウンし、1回ハングし(再起動で復帰)、1回同期不能(再起動で復帰)になりました。 今まで使っていたmp3プレイヤー(Rio carbon)も時々トラブルがありましたが、それに比べてもちょっと頻繁にトラブルが起きているような気がします。 時々ファームウェアがアップデートされるようですので、そのうち改善されることを期待しましょう。

総評

iPod touchは、音楽プレイヤー&フォトビューアとしてだけ使った場合でも、これだけ使いやすくて16GBもあって5万円未満というのはお買い得だったと思います。
フォトビューアとしては、まだまだ発展できそうな気がしますので、今後のファームウェアアップデート&サードパーティ製アプリで充実させていって欲しいですね。