1

我正在为我的公司测试 Microsoft 的 ESENT(可扩展存储引擎)。但是,我有奇怪的性能结果。

与同类技术(SqlLite)相比,读取数据时性能很弱。

在我的性能测试中,我或多或少地随机读取了数据库中的所有数据。我不会两次读取相同的数据,所以我认为缓存无法帮助我。我多次运行测试以获得数据“热”时的速度。我在 long 类型的 id 上使用索引。我使用以下函数:JetSetCurrentIndex、JetMakeKey、JetSeek 和 JetRetrieveColumn 来读取。

在 Windows Vista 中,我激活了参数 JET_paramEnableFileCache,它创造了奇迹,甚至比 SqlLite 还要快。

但是,由于此参数在 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 回答