首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

避免NHibernate中实体的第一级缓存?

避免NHibernate中实体的第一级缓存是指在使用NHibernate作为ORM框架时,避免使用其内置的第一级缓存,以提高应用程序的性能。

NHibernate的第一级缓存是指在Session对象的生命周期内,对象的缓存。当用户从数据库中查询一个对象时,NHibernate会将该对象存储在第一级缓存中,以便后续可以直接从缓存中获取该对象,而不需要再次查询数据库。但是,当应用程序需要处理大量数据时,第一级缓存可能会导致内存占用过多,从而影响应用程序的性能。

为了避免第一级缓存的问题,可以采用以下方法:

  1. 使用Session.Clear()方法清除第一级缓存。但是,需要注意的是,这将会清除Session中所有的缓存,可能会影响应用程序的性能。
  2. 使用Session.Flush()方法将Session中的变更同步到数据库中,但不清除第一级缓存。这样可以减少缓存的内存占用。
  3. 使用Session.Evict()方法将某个对象从第一级缓存中移除。这样可以减少缓存的内存占用。
  4. 使用多个Session对象来处理不同的数据集,这样可以避免单个Session对象的缓存占用过多内存。

总之,避免NHibernate中实体的第一级缓存需要根据应用程序的具体需求和性能要求来选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实体列表缓存(最土方法实现百万性能)

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿大数据实时计算项目。...这样表,往往可以接受三五秒甚至更长延迟,正是最适合使用缓存地方。 实体缓存:一次性加载全表数据进入内存,供上层多维度查询! 来看一个例程: ? ? ?...根据查询日志可以看到,虽然执行了1000万次查询,实际上只有一行select日志输出,也就是只查了一次数据库,其它9,999,999次从缓存查找。...实体缓存查询速度只取决于 CPU主频,在这台AMD古董机上也可以轻松得到百万速度。 最后一行是实体缓存统计日志,10秒输出第一次,然后每10分钟输出一次,统计了缓存数、请求数、命中率。 ?...由于实体缓存添删改过期跟实体操作绑定在一起,因此,越过实体类直接DAL执行更新操作,或者其它服务器修改数据,此时无法影响实体缓存,导致数据更新不及时。

82810

NHibernate 缓存

缓存管理 一缓存管理也是很简单, 可以通过下面的三个方法管理: session.Evict 从一缓存删除指定实例; session.Clear 清空一缓存, 不会保存修改内容; session.Contains...检查实例是否存在于一缓存。...>true` true` 这三个属性作用是显而易见第一个是指定使用什么二缓存实现...这些实现都是 2、 配置指定实体类、集合启用二缓存缓存 在 hibernate.cfg.xml 文件添加下面的设置: <class-cache class="HibernateTest.Models.Category...也可以在<em>实体</em>类<em>的</em> hbm 映射文件<em>中</em>配置使用二<em>级</em><em>缓存</em>, 不过在 hibernate.cfg.xml 文件中统一配置是推荐<em>的</em>做法。

60411
  • Hibernate缓存

    这是因为 Hibernate使用了一缓存,一缓存又叫Session缓存 在一个会话生命期里面,他所用到数据会使用缓冲第一次读是编号为2数据记录 第一次读时候,内存什么都没有,这时候就要用一条...select语句从数据库读出一条记录,同时把这些数据放到session缓存 里面,接下来又要读同样数据,这时候他就不会再向数据库读取数据,而是向缓存读取数据。...,放入缓存,当执行session.evict(gb);语句时,就会把 缓存数据移除掉。...“心狠手辣”,不让敌人有丝毫反抗有生力量…… 这个方法会让缓存所有东西清除干干净净。...,判断缓存是否缓存在gb2对象。

    45430

    Mybatis延迟加载 一缓存缓存

    数据正确与否对最终结果影响很大 例如:商品库存,银行汇率,股市牌价 Mybatis缓存缓存:它指的是MybatisSqlSession对象缓存 当我们执行查询之后,查询结果会同时存入到...第一次发起查询用户 id 为 1 用户信息,先去找缓存是否有 id 为 1 用户信息,如果没有,从数据库查 询用户信息。 得到用户信息,将用户信息存储到一缓存。...如果 sqlSession 去执行 commit 操作(执行插入、更新、删除),清空 SqlSession 缓存,这样 做目的为了让缓存存储是最新信息,避免脏读。...二缓存使用步骤 第一步:让Mybatis框架支持二缓存(在SqlMapConfig.xml配置) 第二步:让当前映射文件支持二缓存(IUserDao.xml配置) 第三步:让当前操作支持二缓存...(在select标签配置) 二缓存分析 首先开启 mybatis 缓存

    64920

    NHibernate 缓存

    大家好,又见面了,我是你们朋友全栈君。 NHibernate 支持两种级别的缓存, 即一缓存以及二缓存。...一缓存管理 一缓存管理也是很简单, 可以通过下面的三个方法管理: session.Evict 从一缓存删除指定实例; session.Clear 清空一缓存, 不会保存修改内容; session.Contains...检查实例是否存在于一缓存。...这些实现都是 2、 配置指定实体类、集合启用二缓存缓存 在 hibernate.cfg.xml 文件添加下面的设置: <class-cache class="HibernateTest.Models.Category...也可以在<em>实体</em>类<em>的</em> hbm 映射文件<em>中</em>配置使用二<em>级</em><em>缓存</em>, 不过在 hibernate.cfg.xml 文件中统一配置是推荐<em>的</em>做法。

    44310

    MyBatis 和二缓存

    前言 1.1 什么是缓存 缓存是存在内存临时数据,通过将我们 「经常查询但不常变数据」 放在内存,当我们查询数据时就不在需要从磁盘读取,而只需要从缓存查询即可,大大提升了查询效率,解决了高并发系统性能问题...指向是同一个对象; 3.3 一缓存失效情况 一缓存是默认一直开启,我们是关闭不了。...但是有时候一缓存会出现失效情况,主要可能是如下几种原因导致; 「每个 SqlSession 缓存独立」 当我们使用不同 SqlSession 时,有多少个 SqlSession 就需要向数据库发起多少次查询请求...)开启二缓存; 然后到对应 xxxMapper.xml 配置二缓存; 配置之后,xxxMapper.xml...根据结果可以看出,此时缓存已经生效。若是未生效,则会和一缓存结果一致,两者指向不同对象,但此时两个引用指向同一对象,说明二缓存成功。

    48361

    Hibernate缓存 EHCache

    -- 说明:maxElementsInMemory  设置 保存在内存缓存对象最大数量                etemal  设置缓存对象 是否永远不过期,如果值为true,超过设置被忽略...,缓存对象永远不过期                timeToIdleSeconds   设置缓存对象在他过期之前最大空闲时间,单位为秒                timeToLiveSeconds...   设置缓存对象在他过期之前最大生存时间 ,单位为秒                overflowToDisk      设置内存缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘...-- EHCache二缓存策略:       只读缓存          (read-only)       读/写缓存          (read-write)       不严格读/写缓存      ...这就是利用hibernate缓存, 他在内存中保留了我们要查询id=2这条记录,所以当我们再次查询时候,是直接从缓存读出来。

    51110

    5、MyBatis 和二缓存

    前言 1.1 什么是缓存 缓存是存在内存临时数据,通过将我们 经常查询但不常变数据 放在内存,当我们查询数据时就不在需要从磁盘读取,而只需要从缓存查询即可,大大提升了查询效率,解决了高并发系统性能问题...SQL 语句只查询了一次,当第二次获取相同结果时,直接从缓存取结果即可,也就解释了为什么 user1 和 user2 指向是同一个对象; 3.3 一缓存失效情况 一缓存是默认一直开启,我们是关闭不了...但是有时候一缓存会出现失效情况,主要可能是如下几种原因导致; 每个 SqlSession 缓存独立 当我们使用不同 SqlSession 时,有多少个 SqlSession 就需要向数据库发起多少次查询请求...)开启二缓存; 然后到对应 xxxMapper.xml 配置二缓存; 配置之后,xxxMapper.xml...若是未生效,则会和一缓存结果一致,两者指向不同对象,但此时两个引用指向同一对象,说明二缓存成功。

    63020

    浅谈Android 图片缓存策略

    内存缓存,优先加载,速度最快 本地缓存,次优先加载,速度快 网络缓存,最后加载,速度慢,浪费流量 为什么要进行三缓存缓存策略,最实在意义就是 减少不必要流量消耗,增加加载速度 。...三缓存原理 首次加载时候通过网络加载,获取图片,然后保存到内存和 SD 卡。 之后运行 APP 时,优先访问内存图片缓存。 如果内存没有,则加载本地 SD 卡图片。...具体缓存策略可以是这样:内存作为一缓存,本地作为二缓存,网络加载为最后。...Glide 内存缓存 Glide 是默认开启了内存缓存,只要你通过 Glide 加载一张图片,他就会缓存到内存,只要他还没被从内存清理之前,下次使用 Glide 都会从内存缓存中加载。...Glide 硬盘缓存是默认将图片压缩转换后再缓存到硬盘,这种处理方式再避免OOM时候会经常看见。 如果需要改变硬盘缓存策略只需要改变其传入参数即可。

    1.3K20

    缓存架构服务详解!SpringBoot中二缓存服务实现

    ") private RedisService redisService; MyBatis Redis二缓存 MyBatis缓存缓存: MyBatis会在表示会话SqlSession对象建立一个简单缓存...在同一个SqlSession两次执行相同SQL语句: 第一次执行完毕会将数据库查询数据写到缓存(内存),第二次会从缓存获取数据,将不再从数据库查询,从而提高查询效率 当一个SqlSession...结束后该SqlSession缓存就不存在了 MyBatis默认开启一缓存缓存: 二缓存是Mapper级别的缓存: 多个SqlSession去操作同一个MapperSQL语句,多个SqlSession...去操作数据库得到数据会存在二缓存区域,多个SqlSession可以共用二缓存,二缓存是跨SqlSession缓存作用域是mapper同一个namespace 不同SqlSession...两次执行相同namespace下SQL语句且向SQL传递参数也相同即最终执行相同SQL语句: 第一次执行完毕会将数据库查询数据写到缓存(内存),第二次会从缓存获取数据将不再从数据库查询,从而提高查询效率

    43920

    【MyBatis学习13】MyBatis缓存

    缓存原理 前面介绍了,mybatis缓存是mapper级别的缓存,值得注意是,不同mapper都有一个二缓存,也就是说,不同mapper之间缓存是互不影响。...为了更加清楚描述二缓存,先来看一个示意图: 从图中可以看出: sqlSession1去查询用户id为1用户信息,查询到用户信息会将查询数据存储到该UserMapper缓存...缓存执行原理和前面提到缓存是差不多,二缓存与一缓存区别在于二缓存范围更大,多个sqlSession可以共享一个mapper缓存区域。...2.1 开启二缓存 由于mybaits缓存是mapper范围级别,所以除了在SqlMapConfig.xml设置二缓存总开关外,还要在具体mapper.xml开启二缓存。...,flushCache=true表示刷新缓存,这样可以避免数据库脏读。

    65450

    详解Android图片缓存及实例

    详解Android图片缓存及实例 为什么要使用三缓存 如今 Android App 经常会需要网络交互,通过网络获取图片是再正常不过事了 假如每次启动时候都从网络拉取图片的话,势必会消耗很多流量...,通过网络、本地、内存三缓存图片,来减少不必要网络交互,避免浪费流量 什么是三缓存 网络缓存, 不优先加载, 速度慢,浪费流量 本地缓存, 次优先加载, 速度快 内存缓存, 优先加载, 速度最快...三缓存原理 首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存 之后运行 App 时,优先访问内存图片缓存,若内存没有,则加载本地...,handler+thread主要用于数据量多且复杂时,当然这也不是必须,仁者见仁智者见智 同时,为了避免内存溢出问题,我们可以在获取网络图片后。...本地缓存(LocalCacheUtils) 在初次通过网络获取图片后,我们可以在本地SD卡中将图片保存起来 可以使用MD5加密图片网络地址,来作为图片名称保存 /** * 三缓存之本地缓存 */

    1.4K10

    缓存架构服务详解!SpringBoot中二缓存服务实现

    ") private RedisService redisService; MyBatis Redis二缓存 MyBatis缓存缓存: MyBatis会在表示会话SqlSession对象建立一个简单缓存...**一缓存作用域是同一个SqlSession** - **在同一个SqlSession两次执行相同SQL语句:** 第一次执行完毕会将数据库查询数据写到缓存(内存),第二次会从缓存获取数据...,将不再从数据库查询,从而提高查询效率 - 当一个SqlSession结束后该SqlSession缓存就不存在了 - MyBatis默认开启一缓存缓存: 二缓存是Mapper级别的缓存...缓存作用域是mapper同一个namespace 不同SqlSession两次执行相同namespace下SQL语句且向SQL传递参数也相同即最终执行相同SQL语句: 第一次执行完毕会将数据库查询数据写到缓存...开启MyBatis二缓存 在myshop-service-user-provider配置文件开启MyBatis二缓存 spring: application: name: myshop-service-user-provider

    49200

    NHibernate对同一个对象Lazyload要设置一致

    NHibernate中出于性能考虑,经常使用Lazyload方式来加载关联对象,关于什么是Lazyload,以及怎么使用,可以参见博客园文章,比如:http://www.cnblogs.com.../lyj/archive/2008/10/28/1321494.html 常用NHibernate.ByteCode.Castle动态代理来实现Lazyload,使用该程序集会在运行时创建实体对应代理类...,如果实体使用了继承关系,并通过NHibernate来映射,那么动态代理类在类型转换时会有问题。...我在调用Flow.Node之前,调用了Task对象,所以NHibernate根据TaskMapping设置,将Node设置为动态代理类,同时将Node缓存到了Session,然后再调用Flow.Node...时,系统就会先从缓存查找是否有对应Node对象,结果正好有NodeProxy缓存,所以就直接返回NodeProxy给Flow.Node了,系统根本没有检查Flow.Node是不是立即加载还是懒加载

    32220

    .NET(C#)有哪些主流ORM框架,SqlSugar,Dapper,EF还是...

    前言 在以前一篇文章,为大家分享了《什么是ORM?为什么用ORM?浅析ORM使用及利弊》。...从构架上来说,linq2db是对比如:Dapper、PetaPoco这个微ORM进一步封装,但它不像Entity Framework那样笨重。它没有实现状态跟踪,需要自己处理实体状态更改等。...在开发过程参考了NBear与MySoft,吸取了他们一些精华,加入新思想,同时参考EFLambda语法进行大量扩展。该组件已在数百个成熟项目中应用。...推荐等级:★★★☆☆ NHibernate NHibernate是一个面向.NET环境对象/关系数据库映射工具。...批量集合加载 带有lazy="extra"集合 集合过滤器和分页集合 二缓存(实际上NH缓存貌似也很简单?)

    8.3K90

    C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    ISessionFactory - NHibernate.ISessionFactory: 一个基于单数据库已编译映射缓存,它是持久不变且线程安全(额,这句话是从它文档翻译过来)。...是一个提供ISession工厂类,同时也是一个 IConnectionProvider客户端。可以设置一个在事务之间进程或集群缓存。...一个ADO.NET连接封装,用来提供ITransaction工厂。提供了一个通过主键检索对象和导航链接查询对象时缓存。也就是EF Core导航属性。...配置项介绍 在上一篇文章,我们介绍了一下如何设置NHibernate基本配置项,但是并未对配置项进行深入。...这一节,将带领大家看一下NHibernate我们常用配置,因为配置项有很多,但一大部分通常情况都遇不到使用它时候。

    1.2K20

    DotNetNuke初试水之结合NHibernate开发和导入一个Module

    这个名字,选择了DOTNET Framework DotNet,并且结合了单词 Nuke,(意在指出这是一个基于.NETFrameWork开源,可用于企业应用文章管理系统)....,DNN提供了一个Web网站应该具备基本功能,内容管理,日志,安全,多语言支持,流行Search功能,皮肤,缓存,异常处理,页面布局(每个控件摆放设置)。...用向导创建第一个DNN模块 第一次开发,所以我选择完全向导方式进行。...由于在同一个站点下使用了2语言所以需要修改Web.Config配置。 ?...代码重构 生成Nhibernate实体类和Xml文件可以使用CodeSmith或是MyGeneration 应用Nhibernate封装好NHibernate.Repository类库(在

    1.6K20

    NHibernate介绍「建议收藏」

    相比较而言,有些ORM解决方案需要特殊属性,或者是基于模型对象,这些对象又是从特定基类中继承而来。 在NHibernate不用特殊修饰就可以让对象和持久化层交互。...要注意是所有需要持久化属性必须是虚拟,并且要开启延迟加载,所有数据模型类公共方法必须是虚拟,哪怕它们并没有包含到映射文件。 通常来讲,最好把所有的属性都设置为虚拟。...创建NHibernate映射文件 Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例这可能是一对一关系,但这并不是必定。...class元素表示到单个POCO映射。name表示上面的程序集和命名空间中类名,table属性告诉NHibernate数据库哪个表或者视图将被映射。...id元素告诉NHibernate哪个数据库字段和对应对象作为一个唯一键来使用。在本例,我们使用Id这个字段。 generator元素告诉NHibernate怎样给新实体来创建唯一ID。

    70420

    2022年了有哪些值得推荐.NET ORM框架?

    EntityFramework-Plus - EF增强工具集,包括过滤器,审核,缓存,查询,批删除,批更新等。...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入类型映射,比如...NHibernate社区网站 - https://nhibernate.info GitHub地址:https://github.com/nhibernate/nhibernate-core SmartSql...SmartSql = C# MyBatis + .NET Core+ 缓存(内存 | Redis)+ R/W 拆分 + PropertyChangedTrack +动态存储库 + InvokeSync...内存高效- 它提取并缓存对象属性、执行上下文、对象映射和 SQL 语句。它在整个转换和执行过程重用它们。 动态和混合- 它提供了成熟 ORM 一些高级功能。

    5.9K11
    领券