加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – dapper缓冲区/缓存的说明

发布时间:2020-12-15 18:42:24 所属栏目:asp.Net 来源:网络整理
导读:我使用dapper将数据库中的对象作为IEnumerable返回。 由于默认dapper的缓冲区设置设置为true。 这个怎么用? 如果dapper缓存第一个查询,然后从内存中获取对象。 如果有人编辑/删除/添加表中的行会发生什么。这个查询必须再次重新缓存所有数据? 解决方法 缓
我使用dapper将数据库中的对象作为IEnumerable返回。
由于默认dapper的缓冲区设置设置为true。

这个怎么用?

如果dapper缓存第一个查询,然后从内存中获取对象。

如果有人编辑/删除/添加表中的行会发生什么。这个查询必须再次重新缓存所有数据?

解决方法

缓冲区与缓存无关。 Dapper不包括任何类型的数据缓存(尽管它具有与它如何处理命令相关的缓存,即“这个命令字符串,具有这种类型的参数,并且这种类型的实体 – 具有这些相关联的动态生成的方法来配置命令并填充对象“)。

这个开关真的意味着什么:

> false:将在收到/消费时迭代项目 – 基本上,围绕IDataReader的迭代器块

> minus:你只能迭代一次(除非你很乐意重新运行查询)
> plus:你可以遍历巨大的查询(数百万行),而不需要一次内存中的所有内存 – 因为你只是真的看着当前的行被收回
> plus:你不需要等待数据的结束开始迭代 – 只要它有至少一行,你很好去
> minus:在迭代时连接正在使用,这可能导致“连接上已经有一个开放阅读器”(或者任何确切的措辞)错误,如果您尝试在per- (这可以由MARS缓解)
> minus:因为消费者可以做任何他们想要的每个项目(每行可能需要几分钟,如果他们在做一些复杂的事情),命令/阅读器可能会更长时间

> true(默认):数据完全消耗到List< T>之前它把它交给你

> plus:您可以根据需要多次迭代
> minus:如果查询是巨大的,将它们全部加载到内存(在列表中)可能是昂贵的/不可能的
> minus:如果查询较大,则在收集最后一行时可能会有明显的延迟
> plus:一旦得到数据,命令就完成了 – 所以这个和后面的操作没有冲突
> plus:一旦获取数据,命令就已经释放了任何资源(锁等),所以对服务器的影响最小

大多数查询只返回适量的数据(比如说少于100条记录),所以我们很高兴,默认(true)为大多数场景提供最合适的行为。但是,我们可以选择适用于不同的使用场景。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读