1

私は自分の会社のためにMicrosoftのESENT(Extensible Storage Engine)をテストしているところです。しかし、私は奇妙なパフォーマンス結果を持っています。

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

私のパフォーマンステストでは、データベース内のすべてのデータを多かれ少なかれランダムに読み取りました。同じデータを2回読み取らないので、キャッシュは役に立たないと思います。データが「ホット」なときの速度を得るために、テストを何度も実行します。long型のIDにインデックスを使用します。次の関数を使用します:JetSetCurrentIndex、JetMakeKey、JetSeek、JetRetrieveColumn。

Windows Vistaでは、パラメーターJET_paramEnableFileCacheをアクティブにしたところ、奇跡が起こり、SqLiteよりもさらに高速でした。

ただし、このパラメーターはWindows Vista以降で使用できるため、Windows XPのパフォーマンスはSQliteに匹敵するものではありません(15倍遅いなど)。毎回ディスクを読み取ります。Windows XPでSqliteを使用する場合、すべての読み取りテスト(最初のテストを除く)がディスクで読み取られるわけではありません。

別のパラメーターまたは違いを生む何かが欠けていますか?

どうもありがとう !

4

2 に答える 2

4

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

XPでプロセスを存続させると、データが「ホット」なときにパフォーマンスが表示されます。

于 2011-04-07T03:07:15.320 に答える
0

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

于 2011-05-14T10:00:33.750 に答える