我正在为我的公司测试Microsoft的ESENT(可扩展存储引擎)。但是,我的表现结果很奇怪。
与类似技术(SqLite)相比,读取数据时性能非常差。
在我的性能测试中,我或多或少地随机读取了数据库中的所有数据。我没有两次读取相同的数据,所以我认为缓存无法帮助我。我多次运行测试以获得数据“热”时的速度。我在类型为long的id上使用索引。我使用以下函数:JetSetCurrentIndex,JetMakeKey,JetSeek和JetRetrieveColumn来读取。
在Windows Vista中,我激活了参数JET_paramEnableFileCache,它创造了奇迹,甚至比SqLite更快。
但是,由于此参数在Windows Vista或更高版本中可用,因此Windows XP中的性能与SQlite无差别(比15倍慢)。它每次都在磁盘上读取。在Windows XP上使用Sqlite时,所有读取测试(第一个除外)都不会在磁盘上读取。
我是否错过了另一个参数或其他会产生影响的参数?
非常感谢!
答案 0 :(得分:4)
如果JET_paramEnableFileCache正在帮助您,则每次都必须终止并重新启动该进程。引入JET_paramEnableFileCache来处理经常初始化和终止的应用程序,这意味着必须使用OS文件缓存而不是普通的数据库缓存。
如果你在XP上保持进程存活,那么当数据“热”时你会看到性能。
答案 1 :(得分:0)
@Spaceboy:我自己也在考虑这个问题......但是你在windir \ system32中替换了ESENT.DLL吗?有时我成功将DLL放入我的\ bin子目录...