为什么 NHibernate AutoFlush 检查如此昂贵?

2024-01-10

在实践中,我们发现默认的 NHibernate (v2.0 & 2.1) FlushMode=Auto 非常昂贵。查看 NHibernate 源代码表明,确定需要刷新的内容的算法依赖于循环遍历会话中所有实体的强力,并且这种情况发生在事务中运行的每个查询中。

在某些对许多项目进行更新的生产场景中,通过多个查询,我们发现 FlushMode=Auto 的过程比 FlushMode=Commit 的过程长 100 倍。

在执行涉及多个更新、多个查询等的“复杂”会话逻辑时使用 FlushMode 的任何想法/建议/最佳实践。

关于优化 nHibernate 中的 AutoFlush 算法有什么想法吗?


这种缓慢是一个已知问题,在 NH 中跟踪为NH-1365/GitHib 问题 857 https://github.com/nhibernate/nhibernate-core/issues/857

NH 共有三种冲水模式:

  • FlushMode.Auto = 在需要时刷新(如果需要,在提交时和查询之前)。这是默认设置。
  • FlushMode.Commit = 仅在 NH 事务提交时刷新
  • FlushMode.Never = 从不刷新(直到调用 Flush)。这会还是去DB https://stackoverflow.com/questions/432087/nhibernate-flushmode-on-save插入使用本机(身份)PK 生成器的实体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 NHibernate AutoFlush 检查如此昂贵? 的相关文章

  • NHibernate 表更新事件

    我有这个表映射 我认为细节并不重要 WithTable COPACKER FACILITY Id x gt x FacilityNumber FACILITY NUM GeneratedBy Sequence FACSEQ Map x gt
  • 每个会话的 Nhibernate 会话示例

    您好 nhibernate 的一些专业人士能给我每个会话的 Nhibernate 会话实现示例还是 unhaddins 实现吗 或者解释如何做到这一点 此致 恩迪斯 我使用 NHibernate 工作了 4 年 此前我曾与 每次操作打开会话
  • Postgresql 上的 Castle Activerecord 错误是“关系不存在”?

    ActiveRecord 映射 ActiveRecord JobTitle Schema public public class JobTitle ActiveRecordValidationBase
  • 当存在外键但引用的行不存在时,是否可以避免NHibernate.ObjectNotFoundException?

    我正在使用 NHibernate 从遗留数据库中提取一些数据 并且我发现了几种存在外键的情况 但引用的行已被删除 当我制作 NHibernate 映射时 使用 Fluent NHibernate 如下所示 References d gt d
  • 如何在 NHibernate 中自动生成 ID

    如何让 NHibernate 自动生成表的唯一 ID ID 可以是任意的long值 只要每个值仅使用一次 我当前的映射如下所示
  • 使用 SQLite 测试 NHibernate“没有这样的表” - 生成模式

    我正在尝试使用内存中的 SQLite 数据库来测试 NHibernate 提供的数据层 我读过很多关于如何进行此设置的博客和文章 但我现在很困惑为什么它不起作用 问题 当我运行单元测试时 我收到错误 没有这样的表 学生 我读过的文章表明这
  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单
  • AutoMapper 将 IdPost 映射到 Post

    我正在尝试根据规则将 DTO 上的 int IdPost 映射到 Blog 对象上的 Post 对象 我想实现这一点 BlogDTO IdPost gt Blog Post 帖子将由 NHibernate 加载 Session Load I
  • 如何使用 NHibernate 标准来做到这一点

    假设我有 2 张桌子 表1 a b 和表2 c a 我需要做这样的事情 但符合 NHibernate 标准 select a b select count from table2 t2 where t1 a t2 a x from tabl
  • NHibernate代理异常

    我是新 NHibernate 我正在编写一个简单的应用程序 其中的客户类包含 id 和名称 并使用 nhibernate 将对象存储到数据库中 但我得到以下信息 未配置 ProxyFactoryFactory 使用可用的 NHibernat
  • 在 nhibernate 标准中使用内置的 sql“转换”函数

    我想利用 SQL Server 2008 中的 Convert 函数 以便可以在 DateTime 列上进行搜索 建议的 SQL 看起来像这样 SELECT list of fields FROM aTable WHERE CONVERT
  • 一次调用多个结果

    分页数据时 我不仅想返回10条结果 还想获取所有页面中的项目总数 如何在一次调用中获取页面的总计数和结果 我的分页方法是 公共IList GetByCategoryId intcategoryId intfirstResult intmax
  • 在nhibernate中设置聚集索引

    我试图在 nhibernate 中定义一个不是 id 的属性作为聚集索引 但我发现没有办法做到这一点 谁能给我指点一下这是如何完成的 或者它是当前在 nhibernate 中不可用的东西 提前致谢 您可以使用
  • 更改 NHibernate Session.Save 命令超时

    我们有几个长时间运行的后端进程 其运行时间超过默认的 30 秒 我们的NHibernate版本是2 0 1 4000 Spring NET是1 2 0 20313 NHibernate 通过 Spring NET 进行配置
  • Sql 2008 文件流与 NHibernate

    我试图在 sql server 2008 中使用 Filestream 来存储用户上传的图像 我的问题是NHibernate不会出错 但它也不会将数据保存到数据库中 没有创建记录 下面的 Image 类是一个自定义类 不要与 System
  • NHibernate HiLo 生成和 SQL 2005/8 模式

    我手头上有一个问题 我花了几天时间寻找答案但无济于事 我们正在使用 HiLo Id 生成 一切似乎都工作正常 只要实体表处于同一架构中作为 hibernate unique key 表 表结构非常简单 我的 hi 值表在数据库中为 dbo
  • NHibernate:CreateCriteria 和 Exists 子句

    如何使用 CreateCriteria 编写以下 SQL SELECT FROM FooBar fb WHERE EXISTS SELECT FooBarId FROM Baz b WHERE b FooBarId fb Id 您可以这样做
  • 尽管 HQL 获取,Nhibernate 仍然生成代理

    我有以下 HQL 语句 select distinct t from TaskEntity as inner join fetch t Case as c inner join fetch c Client as client inner
  • 升级到 NHibernate 3.1:LINQ、Any 和映射组件集合的错误

    我们目前正在从 NHibernate 2 升级到 3 1 以下场景适用于旧的 LINQ 提供程序 但不适用于 NHibernate 3 1 中的新提供程序 以下是该场景的映射 public class FooDbMap ClassMap
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w

随机推荐

  • 使用 Guice 和 JDBC 进行事务 - 解决方案讨论

    在我的应用程序中 我需要将纯 JDBC 与 Guice 一起使用 但是 Guice 不提供任何内置支持来管理事务 guice persist只提供基于JPA的支持 我无法使用 所以我尝试实现一个简单的解决方案来使用 Guice 和 JDBC
  • 如何在两个 Visual C++ 项目之间共享相同的产品版本?

    我有 2 个 Visual C 项目 它们都有一个 RC 文件 其中定义了现场产品版本 我如何才能使这两个项目从全球范围内获取此版本 全局RC文件或者有什么解决办法 对我来说最有效的是添加两个 解决方案项目 一个是 h 文件 defines
  • 在内核空间模拟鼠标点击

    我试图在内核空间中模拟键盘和鼠标点击 因此它们将无法在其他应用程序中被阻止 与用户空间模拟相反 为了实现这个目标 我发现this https github com jasonpang Interceptor库是 C 的包装器this htt
  • Mongoose 将 req 对象传递给中间件

    我正在为猫鼬编写一个中间件 它使用 pre 为每个查找对象执行query hook postSchema pre query function query next I want to access the req user object
  • Spring Boot - 加载初始数据

    我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么 我正在寻找的是能够用数据填充我的 H2 数据库的东西 例如 我有一个域模型 用户 我可以通过转到 users 来访问用户 但最初数据库中不会有任何用户 因此我必须创建它们 有没有
  • 在 Android 上处理 React Native、Navigator 中的后退按钮

    我有一个Navigator在 Android 反应本机应用程序中 我在用着navigator push 导航到不同的页面 后退按钮会弹出导航器并返回一页似乎很自然 但事实并非如此 它会退出应用程序 做反应原生Navigator确实没有后退按
  • 使用 xslt 获取 X 位置处的节点值

    如何在不使用 foreach 的情况下使用 xslt X 位置的节点值
  • 获取Golang正则表达式中括号内的所有子字符串

    我想使用正则表达式获取 go 中所有括号内的所有子字符串 作为字符串 foo bar foo baz golang 的示例 我想要 bar 和 baz 在Python中我可以做re findall lt foo bar foo baz go
  • 卡尔曼滤波器总是在第一时间预测 0,0

    以下代码用于从下到上扫描图像 然而 卡尔曼滤波器的预测在第一次时总是显示0 0 这样 它就会从底部到 0 0 绘制一条线 如何使路径 卡尔曼滤波器 更接近实际路径 以下代码和图像已更新 import cv2 import matplotli
  • 布局API版本命名

    我不知道这是如何工作的 如果我创建了一个名为layout v11这适用于 v11 以上的所有 api 版本还是仅适用于 v11 第二个我可以将文件夹命名为layout v11 v14仅对 v11 和 v14 API 使用此布局 后缀指定资源
  • 从 xamarin 将文件上传到 Web api 服务器 - 请求处理时间太长

    我正在使用 HttpClient 将二进制文件发布到 Azure 托管的服务器 对于大小不太大的文件 该请求需要很长时间才能传递 有时 当客户端因超时而取消任务时 服务器会收到请求 我使用以下代码异步上传数据 public async Ta
  • Spirit X3可以与BOOST_FUSION_ADAPT_ADT一起使用吗?

    将我的代码从 QI 更改为 X3 并出现一些编译错误BOOST FUSION ADAPT ADT 我尝试了boost 1 64和1 67 它们都不起作用 我修改了精灵X3的例子rexpr min 添加 getter 和 setterstru
  • blogpost 的 rss feed 分页 url 是什么样的?

    我知道要访问 blogspot 博客的 rss feed 您需要访问 blog blogspot com feeds posts default 但是如何获取提要的第二页呢 我知道其他博客使用查询参数 paged 2 是否有类似的查询参数可
  • 如果资源已经存在,如何告诉 helm 不要创建/更改资源?

    我有一个秘密资源模板 安装后将为数据生成随机值 删除该图表 它没有删除秘密资源 因为它们保留下来 并稍后重新安装后 我遇到了问题 这导致它使用新生成的数据运行以前的秘密 这在我的情况下是不希望的 我试图找到我需要包含在模板中的 if 条件是
  • ASP.NET5 MVC6 的模型绑定问题

    我尝试将一些 JSON 数据以角度形式发布到我的 ASP NET5 MVC6 控制器操作 模型绑定器似乎不起作用 不知道我在这里缺少什么 我的 ASP 控制器 public class DefaultController Controlle
  • 有没有更好的方法为 numpy 数组标量分配新值?

    我正在对 numpy 数组中的标量值进行一些快速计算 正如它在文档 https docs scipy org doc numpy 1 13 0 user basics types html array scalars 使用数组标量的主要优点
  • 在ListBox中设置DrawMode删除水平滚动条

    我将列表框控件中的 DrawMode 设置为 OwnerDrawFixed 以便可以为某些项目着色 当项目太长而无法容纳列表框的水平空间时 不会出现水平滚动 怎样才能让滚动条出现呢 您应该在 OwnerDrawFixed 模式下设置列表框的
  • WPF dataGrid 多列的超级标题

    我想在WPF中为多列做标题DataGrid 我尝试使用标题模板 但它会显示一列的标题 下面的 XAML 我尝试过
  • MS Access 限制 X、Y

    是否可以模拟以下 MySQL 查询 SELECT FROM tbl ORDER BY date DESC LIMIT X 10 X为参数 在 MS Access 中 虽然访问 JET TOP关键字不直接提供OFFSET能力 我们可以巧妙地结
  • 为什么 NHibernate AutoFlush 检查如此昂贵?

    在实践中 我们发现默认的 NHibernate v2 0 2 1 FlushMode Auto 非常昂贵 查看 NHibernate 源代码表明 确定需要刷新的内容的算法依赖于循环遍历会话中所有实体的强力 并且这种情况发生在事务中运行的每个