【问题标题】:ESENT performance Vista vs. XPESENT 性能 Vista 与 XP
【发布时间】:2011-03-23 19:33:01
【问题描述】:

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

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

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

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

但是,由于此参数在 Windows Vista 或更高版本上可用,因此在 Windows XP 中的性能无法与 SQlite 相比(比如慢 15 倍)。它每次都在磁盘上读取。在 Windows XP 上使用 Sqlite 时,所有读取测试(第一个除外)都不会在磁盘上读取。

我是否遗漏了另一个参数或会产生影响的东西?

非常感谢!

【问题讨论】:

    标签: sqlite windows-xp windows-vista esent


    【解决方案1】:

    如果 JET_paramEnableFileCache 有帮助,那么您必须每次都终止并重新启动该进程。引入 JET_paramEnableFileCache 是为了处理频繁初始化和终止的应用程序,这意味着必须使用 OS 文件缓存而不是普通的数据库缓存。

    如果您在 XP 上保持进程处于活动状态,那么您将看到数据“热”时的性能。

    【讨论】:

    • 感谢您的相关评论。实际上,我意识到没有什么能阻止我在 Windows XP 或 2000 上使用来自 Vista 的 esent.dll 文件。这样,我不必根据操作系统进行不同的编码。
    【解决方案2】:

    @Spaceboy:我自己也在想这个……但是你替换了 windir\system32 中的 ESENT.DLL 吗?有时我通过将 DLL 放入我的 \bin 子目录来成功...

    【讨论】:

    • 是的,我打算将它放在与我的 .exe 应用程序相同的目录中。但是,我不认为我们有权重新分发这个 dll,因此,使用 ESENT 的项目因此而被放弃。如果最终我们的应用程序不再支持 XP 或更少,我们可以重新评估。
    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2013-07-21
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多