2011-03-23 14 views
1

私はMicrosoftのESENT(Extensible Storage Engine)を私の会社のためにテスト中です。しかし、私は奇妙なパフォーマンスの結果があります。ESENTパフォーマンスVista対XP

類似のテクノロジ(SqLite)と比較して、データを読み取るときのパフォーマンスは非常に低かった。

パフォーマンステストでは、データベース内のすべてのデータを多かれ少なかれランダムに読み取りました。私は同じデータを2度読んでいないので、キャッシュが私を助けないと思います。私はデータが "熱い"ときに速度を持つために何度もテストを実行します。私はlong型のidにインデックスを使用します。私は次の機能を使用します:JetSetCurrentIndex、JetMakeKey、JetSeek、JetRetrieveColumnを読み込みます。

Windows Vistaでは、パラメータJET_paramEnableFileCacheを有効にしました。奇跡を起こし、SqLiteよりも高速でした。

ただし、このパラメータはWindows Vista以降で使用できるため、Windows XPのパフォーマンスはSQliteと同等(15倍速)です。毎回ディスクを読み込みます。 Windows XPでSqliteを使用すると、すべての読み取りテスト(最初のものを除く)はディスク上で読み取られません。

私は別のパラメータや違いがあるものがないのですか?

ありがとうございます!

答えて

4

JET_paramEnableFileCacheが役立っている場合は、毎回プロセスを終了して再起動する必要があります。 JET_paramEnableFileCacheは、頻繁に初期化および終了するアプリケーションを処理するために導入されました。つまり、通常のデータベースキャッシュの代わりにOSファイルキャッシュを使用する必要があります。

プロセスをXP上に維持すると、データが「ホット」のときのパフォーマンスが表示されます。

+0

関連するコメントありがとうございます。実際には、Windows XPまたは2000上のVistaから来るesent.dllファイルを使用することが何も妨げられていないことに気付きました。そうすれば、OSに応じて違うコードを書く必要はありません。 – spaceboy

0

@Spaceboy:私は自分自身を考えていました...しかし、あなたはwindir \ system32のESENT.DLLを置き換えますか?時々私はDLLを私の\ binサブディレクトリに入れて成功しました...

+0

はい私はそれを私の.exeアプリケーションと同じディレクトリに置く予定でした。しかし、私はこのdllを再配布する権利を持っているとは思わないので、ESENTを使うプロジェクトはこれで中止されました。最終的に、私たちのアプリケーションがXP以下をサポートしていない場合は、再評価することができます。 – spaceboy

関連する問題