• Dapper缓冲的真正含义


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

    这个怎么用?

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

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

    一般承认的答案

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

    这个开关的真正含义是:

    • false :将在收到/消费时迭代项目 - 基本上是围绕IDataReader的迭代器块
      • 减:您只能迭代一次(除非您乐意重新运行查询)
      • 加上:你可以迭代巨大的查询(数百万行),而不需要一次全部在内存中 - 因为你只是真正看到当前正在产生的行
      • 加:你不需要等待数据的结束开始迭代 - 只要它至少有一行,你就好了
      • 减:连接在您正在迭代时正在使用,如果您尝试在每行上调用其他命令,这可能导致“连接上已经有一个打开的阅读器”(或者无论确切的措辞是什么)错误基础(这可以通过MARS减轻)
      • 减:因为消费者可以为每个项目做任何他们想做的事情(每行可能需要几分钟,如果他们做了一些复杂的事情),命令/阅读器可能会打开更长时间
    • true (默认值):在将数据交还给您之前,数据已完全消耗在List<T>
      • 加:您可以根据需要多次迭代
      • 减:如果查询是巨大的,将它们全部加载到内存(在列表中)可能是昂贵/不可能的
      • 减:如果查询很大,则在收集最后一行时可能会有明显的延迟
      • 加:一旦获得数据,命令就完成了 - 因此该操作与后续操作之间不存在冲突
      • 加:一旦你获得数据,该命令已经释放了任何资源(锁等),因此你对服务器的影响最小

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

  • 相关阅读:
    odoo tree视图修改每页展示数量
    利用docker搭建odoo系统
    C++中的函数对象
    C++中的Lambda
    MySQL连接在阿里云创建的MySQL数据库
    阿里云网页版远程链接出错Unable to negotiate key exchange for server host key algorithms
    Machine Learning by Andrew Ng
    小羊的英语养成日记
    在树莓派用Docker部署<SS>服务器
    restassured接口测试
  • 原文地址:https://www.cnblogs.com/nnnnnn/p/14130311.html
Copyright © 2020-2023  润新知