2011-03-23 40 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