gpt4 book ai didi

nhibernate - 在我的 NHibernate/SQLite 项目中提交非常慢

转载 作者:行者123 更新时间:2023-12-02 23:20:57 25 4
gpt4 key购买 nike

我刚刚开始对我的 Fluent NHibernate/SQLite 项目进行一些实际性能测试,当我提交到数据库时遇到一些严重的延迟。我所说的认真是指花费 20 - 30 秒提交 30 K 数据!

随着数据库的增长,这种延迟似乎会变得更糟。当 SQLite DB 文件为空时,提交几乎立即发生,但是当它增长到 10 Meg 时,我看到了这些巨大的延迟。

数据库有 16 个表,平均每个表 10 列。

一个可能的问题是我存储了大约十几个IList<float>成员,但它们通常只有 200 个元素长。但这是 Fluent NHibernate 自动映射的最新功能,它将每个 float 存储在单个表行中,所以这可能是一个潜在的问题。

关于如何追踪这个问题有什么建议吗?我怀疑 SQLite 是罪魁祸首,但也许它是 NHibernate?

我没有任何使用分析器的经验,但我正在考虑购买一个。我知道NHibernate Profiler - 对于与 SQLite 配合良好的分析器有什么建议吗?

编辑

更多测试表明,导致速度变慢的不是数据库的大小 - 它取决于自启动程序以来我完成的保存次数。第一次保存的提交时间约为 300 毫秒,到第 50 次保存时,提交时间将超过 1000 毫秒。

我一直保持一个 session 打开 - 也许我需要一些显式的刷新逻辑?

此外,我还下载了 NHibernate Profiler。它向我发出了有关 IList 成员的“大量个人写入”的警报。警报描述建议打开批处理,但据我所知,SQLite 不支持这一点。

还提到了多查询支持,所以我将阅读相关内容。

/编辑

这是保存数据的方法 - 如果您忽略所有错误处理和调试日志记录,它只是 SaveOrUpdate 调用和 Commit。

    public static void SaveMeasurement(object measurement)
{
// Get the application's database session
var session = GetSession();
using (var transaction = session.BeginTransaction())
{
session.Save(measurement);
transaction.Commit();
}
}

最佳答案

您的事务应该围绕整个操作,而不是每次保存。

您还可以从启用 ado.net 批处理中受益: 1000

关于nhibernate - 在我的 NHibernate/SQLite 项目中提交非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com