2011-03-23 64 views
1

我正在爲我的公司測試Microsoft的ESENT(可擴展存儲引擎)。但是,我有奇怪的表現結果。ESENT性能Vista vs XP

在類似技術(SqLite)的比較中,讀取數據時性能非常弱。

在我的性能測試中,我或多或少地隨機讀取數據庫中的所有數據。我不讀兩次相同的數據,所以我認爲緩存不能幫助我。當數據「熱」時,我多次運行測試以獲得速度。我在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來處理頻繁初始化和終止的應用程序,這意味着必須使用操作系統文件緩存而不是普通的數據庫緩存。

如果你在XP上保持這個進程是活着的,那麼當數據是「熱」時你會看到性能。

+0

感謝您的相關評論。實際上,我意識到沒有任何東西阻止我在Windows XP或2000上使用來自Vista的esent.dll文件。這樣,根據操作系統,我不必根據不同的代碼進行編碼。 – spaceboy 2011-04-07 13:22:46

0

@Spaceboy:我自己在想這個......但是您是否替換了windir \ system32中的ESENT.DLL?有時我通過將DLL放入我的\ bin子目錄成功...

+0

是的,我打算把它放在與我的.exe應用程序相同的目錄中。但是,我認爲我們沒有權利重新發布此dll,因此使用ESENT的項目因此而被拋棄。如果最終我們的應用程序不再支持XP或更少,我們可以重新評估。 – spaceboy 2011-07-07 15:16:26