首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dapper buffer/cache说明

dapper buffer/cache说明
EN

Stack Overflow用户
提问于 2012-10-23 16:42:29
回答 1查看 9.8K关注 0票数 44

我使用dapper将数据库中的对象作为IEnumerable返回。默认情况下,dapper将缓冲区设置设置为true。

这是怎么回事?

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

如果有人在表中编辑/删除/添加行,会发生什么情况?对于这个查询,dapper必须重新缓存所有数据吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-23 16:51:34

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

这个开关的真正含义是:

  • false:会在项目被接收/消费时进行迭代--基本上就是一个围绕yielded
  • plus:的迭代块--
  • :你只能迭代它一次(除非你乐于重新运行查询)
  • plus:你可以遍历巨大的查询(数百万行),而不需要一次把它们都放在内存中--因为你只需要查看当前的行,你不需要等待数据的末尾开始迭代-只要它至少有一行。you‘s good to go
  • minus:当你在迭代时,连接正在使用中,这可能会导致“连接上已经有一个打开的阅读器”(或者不管确切的措辞是什么)错误如果你试图逐行调用其他命令(这可以被MARS减轻)
  • 减去:因为消费者可以为每一项做任何他们想做的事情(如果他们正在做一些复杂的事情,每行可能需要几分钟),命令/阅读器可能是为longer

打开的

  • true (缺省设置):在将数据交回给您之前,数据会被完全消耗到一个行中

    :您可以想迭代多少次就迭代多少次

    • 减去:如果查询很大,将它们加载到内存(在列表中)可能会很昂贵/ impossible
    • minus:如果查询很大,在收集最后一行数据时可能会有明显的延迟
    • plus:一旦您获得数据,命令就完成了-所以一旦您获得数据,该命令和后续的so之间就不会发生冲突。该命令已经释放了所有资源(锁等),因此对server

的影响最小

大多数查询只返回中等数量的数据(比方说,少于100条记录),所以我们很高兴默认的(true)为大多数场景提供了最合适的行为。但我们为您提供了该选项,以满足不同的使用场景。

票数 72
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13026558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档