我正在为我的公司测试微软的ESENT (可扩展存储引擎)。然而,我得到了奇怪的性能结果。
与类似的技术(SqLite)相比,在读取数据时性能非常弱。
在我的性能测试中,我或多或少随机读取数据库中的所有数据。我不会读取相同的数据两次,所以我认为缓存不能帮助我。我多次运行测试,以获得数据“热”时的速度。我在long类型的id上使用索引。我使用以下函数:JetSetCurrentIndex、JetMakeKey、JetSeek和JetRetrieveColumn来读取。
在Windows Vista中,我激活了参数JET_paramEnableFileCache,它创造了奇迹,甚至比SqLite还快。
但是,由于此参数在Windows Vista或更高版本上可用,因此在Windows XP中的性能无法与SQlite相提并论(比如慢15倍)。它每次都会在磁盘上读取。在Windows XP上使用Sqlite时,所有读取测试(第一个除外)都不在磁盘上读取。
我是不是遗漏了另一个参数,或者其他可以造成差异的东西?
非常感谢!
发布于 2011-04-07 11:07:15
如果JET_paramEnableFileCache提供了帮助,那么您每次都必须终止并重新启动该进程。引入JET_paramEnableFileCache是为了处理频繁初始化和终止的应用程序,这意味着必须使用操作系统文件缓存,而不是普通的数据库缓存。
如果您在XP上保持进程活动,那么您将看到数据“热”时的性能。
发布于 2011-05-14 18:00:34
@Spaceboy:我自己也在想……但是您要替换windir\system32中的ESENT.DLL吗?有时我会成功地将DLL放到我的\bin子目录中...
https://stackoverflow.com/questions/5410618
复制相似问题