什么时候应该避免使用 NHibernate 的延迟加载功能?

2023-11-23

我听到的关于 NHibernate 延迟加载的大部分说法是,使用它比不使用它要好。似乎最小化数据库访问以减少瓶颈是有意义的。但几乎没有什么事情是不需要权衡的,当然它会迫使你有一些限制设计virtual特性。但我也注意到一些开发人员关闭了某些常用对象的延迟加载。

这让我想知道是否在某些特定情况下使用延迟加载会损害数据访问性能。

所以我想知道,何时以及在什么情况下我应该避免延迟加载 NHibernate 持久对象之一?

延迟加载的缺点仅仅是额外的处理时间,还是 nhibernate 延迟加载也会增加数据访问时间(例如,通过对数据库进行额外的往返)?

Thanks!


从数据库中急切加载对象和延迟加载对象之间存在明显的性能权衡。

如果您使用急切加载,您会在单个查询中吸收大​​量数据,然后可以将其缓存。这在应用程序启动时最常见。您正在用内存消耗换取数据库往返。

如果使用延迟加载,则在单个查询中吸收最少量的数据,但是任何时候您需要与初始数据相关的更多信息,都需要对数据库进行更多查询,并且数据库性能命中通常是大多数情况下的主要性能瓶颈。应用程序。

因此,一般来说,您总是希望准确检索整个“工作单元“,不多也不少。在某些情况下,您可能并不确切知道自己需要什么(因为用户正在通过向导或类似的东西进行工作),在这种情况下,边做边延迟加载可能是有意义的。

如果您正在使用 ORM 并专注于快速添加功能,稍后会回来优化性能(这是非常常见的,也是一种很好的方法),那么将延迟加载设置为默认值是正确的方法。如果您后来发现(通过性能分析/分析)您有一个查询来获取一个对象,然后有 N 个查询来获取与该原始对象相关的 N 个对象,您可以更改该代码段以使用预先加载来仅命中数据库一次而不是 N+1 次(N+1 问题是使用延迟加载的众所周知的缺点)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候应该避免使用 NHibernate 的延迟加载功能? 的相关文章

  • 使用应用程序上下文滑动图像加载

    我在我的 Android 应用程序中使用 glide 进行图像加载 为了避免任何崩溃 我正在使用应用程序上下文加载图像 这对应用程序和内存的性能有何影响 这对应用程序和内存的性能有何影响 Glide提供了这么多 with 方法是有原因的 它
  • 如何在 NHibernate 中使用 READPAST 提示?

    有什么办法可以让 NHibernate 使用吗the READPAST hint https learn microsoft com en us sql t sql queries hints transact sql table从 SQL
  • SQLAlchemy:如何过滤日期字段?

    这是模型 class User Base birthday Column Date index True in database it s like 1987 01 17 我想在两个日期之间进行过滤 例如选择 18 30 年区间内的所有用户
  • 在 MVC 应用程序中配置 NHibernate 二级缓存

    我有一个使用 NHibernate 的 MVC3 应用程序 一切都很顺利 直到我开始尝试添加二级缓存 浏览网页几个小时后 我终于找到了我认为正确的 dll NHibernate Caches SysCache2 dll 并将其添加到我的项目
  • 使用 Java-Large 文件查询 JSON 文件

    我正在尝试使用 java 解析下面的 JSON 文件 我需要能够 按 ID 或名称或对象中的任何字段搜索文件 也在字段中搜索空值 搜索应返回整个对象 该文件将会很大 并且搜索应该仍然很省时 id 1 name Mark Robb last
  • 通过左连接实现精确分页

    我已经思考这个问题有一段时间了 我认为最好四处询问并听听其他人的想法 我正在构建一个在 Mysql 上存储位置的系统 每个位置都有一个类型 有些位置有多个地址 表格看起来像这样 location location id autoincrem
  • NHibernate Criteria API 是否支持集合属性的投影?

    我需要使用条件 API 复制以下工作 HQL 查询 session CreateQuery select c from Parent p inner join p Children c where p Id 9 and c Id 33 Se
  • n的渐近增长选择下限(n/2)

    如何找到 n select Floor n 2 的渐近增长 我试过 使用扩展并得到它等于 n n 1 floor n 2 1 n floor n 2 知道我该如何从那里去吗 感谢任何帮助 更喜欢提示而不是答案 我同意上面的答案 但想提供更多
  • NHibernate Hi/Lo - id 中的间隙

    场景 Hi Lo 初始化为MyEntity与 Lo 100 桌子是空的 具有不同连接的两个会话都插入了三个项目 TableIds 1 2 3 100 101 102 如果稍后有第三个进来并插入三项 TableIds 200 201 202
  • Itertools 与嵌套循环性能

    我必须生成列表中所有两对项目组合 现在 我知道有两种方法可以实现这一点 嵌套 for 循环和 python 的内置迭代工具 from itertools import combinations foo 1 2 3 4 for i in xr
  • 如何在大空间尺度上加速A*算法?

    From http ccl northwestern edu netlogo models community Astardemo http ccl northwestern edu netlogo models community Ast
  • 预填充 UICollectionView 单元重用队列

    问题 我有一个应用程序 只有一个UICollectionView我第一次滚动它时很卡顿 我已将来源范围缩小到正在创建新单元格 2 的事实 使用initWithFrame 因为周围没有可以重复使用的细胞 初始滚动后 重用队列不为空 单元格可以
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • NHibernate:级联保存到子级不会插入

    我有一个像这样的双向关联 public class Parent public int ParentId get set other properties public IEnumerable
  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • 如何将此本机 SQL 查询转换为 HQL

    所以我有这个很长的复杂的 Native SQLQuery string hql SELECT FROM SELECT a rownum r FROM select f2 filmid f2 realisateurid f2 titre f2
  • 如何加速我的 Perl 程序?

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 Perl 项目 除了简单的代码优化之外 还有哪些不错的方法可以加速它 Secondly 用Perl从头开始编写程序时 有哪些好的方法
  • 如何加快 Java VM (JVM) 的启动时间?

    我正在运行启动多个 JVM 进程的测试 与 JVM 内运行的实际测试时间相比 JVM 的总结启动时间非常重要 我怎样才能加快速度 我已经使用了 client 选项 这确实有帮助 但没有我想要的那么多 还有其他方法吗 比如预加载一堆 JVM
  • 如何针对 IE 进行优化?

    我有一个 JS 密集型应用程序 它在 IE 中运行缓慢 我将花费大约一周的时间来优化 IE 并且我想要一些关于尝试的方向 我发现这个线程引用Drip https ieleak svn sourceforge net svnroot iele
  • 在 R 中,为什么 sum 与其他方法(例如 cumsum)相比如此慢?

    我正在尝试实现一个需要非常快的函数 主要是因为它一遍又一遍地处理巨大的数据帧 R 总是让我感到困惑 为什么它有时有点慢 而有时又慢得离谱 不幸的是 它从来都不快 不管怎样 我一直认为 如果可能的话 当以某种方式推入 apply sapply

随机推荐

  • 隐藏 TreeView 项目

    我一直在尝试隐藏 TreeView 中的项目 我使用自定义数据类型作为源 称为 SettingsMenuItem 它继承自 FrameworkElement 当前为 FrameworkContentElement 因为否则 TreeView
  • Java中的静态块[重复]

    这个问题在这里已经有答案了 前几天我正在查看一些代码 我发现 static 来自 C 我不知道为什么会出现这种情况 这不是一个错误 因为代码编译得很好 这个 静态 代码块是什么 It s a 静态初始化器 它在类加载 或准确地说是初始化 但
  • HTML5 中的 iframe 拉伸

    我有两个 html 文件 一个包含另一个带有 iframe 的文件 我想让这个 iframe 拉伸到父 html 的整个高度 所以第一个 html 文件 具有红色背景 如下所示 第二个 具有蓝色背景
  • Python:比较两个 csv 文件中的特定列

    假设我有两个 CSV 文件 file1 和 file2 其内容如下所示 file1 fred 43 Male 23 45 blue 1 bedrock avenue file2 fred 39 Male 23 45 blue 1 bedro
  • 如何在 Delphi XE3 中的 Firemonkey FM2 应用程序中设置非客户区的样式

    我之前在 Delphi XE2 时间范围内问过这个问题 当时的答案很漂亮丑陋的黑客 根据官方发行说明 现在 Delphi XE3 支持非客户端主题 在Firemonkey FM2中的Delphi XE3中如何做到这一点 我相信这一定与样式书
  • Jenkinsfile - 脚本管道语法中的条件阶段执行

    我们正在使用脚本管道我们的语法Jenkinsfile其中定义了很多阶段来构建和部署我们的代码 我们有一个用例 如果我正在做一个任务 我想运行我的所有阶段完整构建但如果我需要执行一些 AWS 路由 则仅运行一个特定阶段 我知道我可以使用if
  • 如果将 PendingIntent 上的标志设置为 0 会发生什么?

    当您将待处理意图的标志设置为 0 时 到底会发生什么 它只是不升起一个标志还是默认为其他标志之一 不 这是创建新 PendingIntent 的 默认 行为 无论该行为是否已存在 如果您想要更专门的行为 例如在底层 Intent 相同的情况
  • TinyTds 错误:Adaptive Server 连接超时

    我们正在 Rails 3 2 12 ruby 1 9 3 上使用当前的tinyTDS gem 0 6 2 运行 Ruby on Rails 应用程序 我们使用 MS SQL 2012 或 2014 并面临比平常更多的以下错误消息 TinyT
  • 如何将 16 位 PCM 音频字节数组转换为双精度或浮点数组?

    我正在尝试对 3gpp 音频文件执行快速傅里叶变换 该文件包含来自手机麦克风的 44100kHz 的 5 秒小录音 出于显而易见的原因 我能找到的每个 Java FFT 算法都只接受 double float 或 Complex 输入 但我
  • 将 Azure 磁盘附加到 AKS pod 时出现权限错误

    我已经与这个错误作斗争了几个小时了 找到了几篇文章 但到目前为止没有任何帮助 我的工作基于 操作指南 gt 配置数据卷 gt Azure 磁盘 静态 https learn microsoft com en us azure aks azu
  • C++ 中的变量到底是什么?

    标准说 A variable通过对象的声明引入 变量的名称表示对象 但这个定义实际上意味着什么 变量是否为对象提供名称 即变量是否只是匿名对象的命名机制 或者变量就是名称本身 或者变量是否是一个命名对象 因为每个变量也是一个对象 或者变量只
  • 为什么 check_box 表单助手会生成两个复选框,其中一个是隐藏的?

    这段代码 form fo store products 做 f f check box track inventory 创建这个 html
  • 如何通过 jQuery 设置光标图像?

    在网络应用程序中 我有一个加载事件 如果浏览器正在从服务器加载数据 我希望光标更改为显示时钟的 gif 如何更改光标外观 我只在参考光标外观的博客中找到了这个 this css cursor move 我想改为加载图像 试试这个方法 thi
  • 子集合 List.Any 的表达式树

    我正在使用表达式树构建通用 linq 查询 在子集合上创建表达式时我陷入困境 由于类型不兼容 方法调用会崩溃 通常我知道该放什么 但是 Any 方法调用让我感到困惑 我已经尝试了所有我能想到的类型 但没有成功 任何帮助 将不胜感激 这是我的
  • FullCalendar 在 dayClick 上打开引导模式

    我想在用户单击 fullCalendar 中的某一天时打开引导模式 我查看了 dayClick 事件 但不知道如何调用模型 dayClick function date jsEvent view call the model 调用引导模型的
  • 我必须使用什么 Uxtheme 函数来获取最小化、最大化和关闭按钮的默认大小?

    我正在使用DrawThemeBackground函数在画布上绘制一些系统元素 我需要绘制表单的标题按钮 我错过的唯一部分是如何获得default标题按钮的大小 Exist any Uxtheme function to get that i
  • Android:将多行插入sqlite数据库不起作用

    我正在使用以下 Android 项目方法将单行插入数据库 myDB execSQL INSERT INTO Buss BussName RouteName VALUES buss1 buss2 效果很好 我看到这个链接在sqlite数据库中
  • 这个素数生成器的执行时间可以提高吗?

    我撰写本文时的最初目标是尽可能留下最小的足迹 我可以自信地说 这个目标已经实现了 不幸的是 这使我的实施速度相当缓慢 要生成 200 万以下的所有素数 在 3Ghz Intel 芯片上大约需要 8 秒 是否有办法以最小的牺牲来改善此代码的执
  • Google 图表显示错误的月份

    I ve got a google line chart which shows the correct line but the annotation of the Date is off by one month exactly The
  • 什么时候应该避免使用 NHibernate 的延迟加载功能?

    我听到的关于 NHibernate 延迟加载的大部分说法是 使用它比不使用它要好 似乎最小化数据库访问以减少瓶颈是有意义的 但几乎没有什么事情是不需要权衡的 当然它会迫使你有一些限制设计virtual特性 但我也注意到一些开发人员关闭了某些