实体框架、linq 函数和内存使用

2024-02-29

我是 EF 新手,我曾经使用数据集、表适配器和存储过程。我刚刚发现 EF 的简单性,并且发现 EF 方法可以为我的开发提供很多帮助。我有几个问题,我试图寻找他们的答案但徒劳。因为我总是与有以下情况的客户合作巨大的桌子,例如我拨打这个电话的事实:

_ordersContext.Services.ToList()

这是否意味着整个服务表已加载到内存中?如果答案是肯定的(顺便说一句,我认为答案是肯定的),我们可以通过使用 linq 函数来避免内存成本吗?例如 Take() 方法? (我的意思是如果你只想有 10 条记录,无需将整个表加载到内存中)。关于其他 linq 函数的同样问题,例如 where、first、firstordefault、count 等...我的意思是,我们必须加载整个表吗?是否有一个很好的文档讨论如何在最佳实践和内存使用方面使用 EF。


每次看MSDNLINQ方法 https://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods(v=vs.110).aspx。如果你发现这个词deferred您知道该方法不执行查询并且可以与其他方法链接。仅那些不使用的延迟执行将开始处理查询并将结果加载到内存中。

另请记住,您可以强制Linq-To-Objects无需将所有内容加载到内存中AsEnumerable()。这会将您的查询转换为 SQL,执行数据库查询并将结果流式传输到内存中。

所以你可以这样做:

var orderList = _ordersContext.Services
    .Where(x => somecondition)
    .OrderBy(x => x.Column)
    .AsEnumerable() // after this you can use any .NET method since it doesnt need to be translated to sql
    .Where(x => complex filter not supported by Linq-To-Entities)
    .Take(10)
    .ToList()

这仍然只会将 10 条记录加载到内存中,并且它使用数据库引擎来(预)过滤或排序,但允许使用 Linq-To-Entities 不支持的 .NET 方法。

Related:

Linq - 找出是否延迟执行的最快方法是什么? https://stackoverflow.com/questions/3894490/linq-what-is-the-quickest-way-to-find-out-deferred-execution-or-not

通常,返回序列的方法使用延迟执行, 返回单个对象的方法则不然。

例外是返回集合的方法,例如ToList, ToArray, ToLookup, ToDictionary不使用延迟执行。

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

实体框架、linq 函数和内存使用 的相关文章

  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • 加权随机图

    假设我有一个大的二维数组 其值范围在 0 1 范围内 其中 0 表示 不可能 1 表示 极有可能 如何根据上述概率在该数组中选择一组随机点 看待问题的一种方法是 暂时 忽略您正在处理二维网格的事实 你拥有的是一组加权的项目 从这样的集合中随
  • 有没有办法使用 JQuery GetJSON 方法从外部页面获取 HTML?

    假设您正在尝试执行 jquery ajax 请求 例如 ajax url http other website com 据我了解 由于同源原则 这个请求会失败 因为URL是外部域 不过我听说过GetJSON 不遵守此原则 可以使用 JSON
  • 如何从 Python 文件更新 Qml 对象的属性?

    我想在 Qml 中显示一个矩形 并且想从我的 python 代码中更改矩形的属性 宽度 长度 实际上 Python代码中有一个套接字连接 通过该连接从另一台计算机接收宽度和长度的值 简单地说 另一个用户应该能够实时调整这个矩形 我知道如何在
  • 使用 ajax 和 webapi 进行长轮询有什么好处...它会杀死我的服务器吗?和字符串比较

    我有一个非常简单的长轮询 ajax 调用 如下所示 function poll ajax url myserver success function data do my stuff here dataType json complete
  • 如何在Python中显示小数点后100位的无理数?

    我想求小数点后 2 到 100 位的平方根 但默认情况下只显示 10 我该如何更改 decimal http docs python org library decimal html模块派上用场 gt gt gt from decimal
  • 为什么类中不允许函数模板特化?

    在stackoverflow上找到了我的许多问题的答案后 我现在遇到了一个我找不到答案的问题 我希望有人愿意帮助我 我的问题是我想在 C 类中对函数进行显式模板化 我的编译器 g 和 C 标准 14 7 3 告诉我 这种专业化必须在声明类的
  • 图像未从数据库获取

    我在我的服务器中存储了一些图像 我使用 JSON 从服务器获取远程数据 当我将图像存储在本地数据库中时它正在工作 当我使用 json url 时它不起作用 我收到 EXC BAD ACCESS 错误 code Mysof h 文件 inte
  • 如何编写自定义 python 日志处理程序?

    如何编写自定义控制台日志函数以仅在控制台窗口上输出单行日志消息 而不是附加 直到第一个常规日志记录 progress ProgressConsoleHandler console logging StreamHandler logger l
  • Material-UI Next js 链接按钮

    我正在开发一个使用 Next JS 和 Material UI 构建的服务器端渲染 React 项目 我想应用到 Material Uibutton https material ui com api button gt 的与动态路线链接
  • 从 ts 打开选择(角度、ng-select)

    我在页面上有几个 ng selects 并且正在尝试从 ts 打开一个 我可以使用以下命令专注于正确的 ng select ViewChildren NgSelectComponent ngselect QueryList
  • 有效计算 JavaScript 中对象的键/属性的数量

    这个问题几乎与如何有效地计算 JavaScript 中对象的键 属性的数量 https stackoverflow com questions 126100 how to efficiently count the number of ke
  • ScrollView 中的 ListView - 小错误

    我想在滚动视图中有一个列表视图 这个方法几乎完美 https stackoverflow com a 3495908 2811653 https stackoverflow com a 3495908 2811653 当我在一行中输入的文本
  • 如何使用 Nokogiri 的 xpath 和 at_xpath 方法

    我正在学习如何使用 Nokogiri 根据这段代码 我提出了几个问题 require rubygems require mechanize post agent WWW Mechanize new post page post agent
  • 有人可以解释一下 staticmethod 的源代码在 python 中是如何工作的吗

    首先 我了解装饰器一般是如何工作的 而且我知道 staticmethod去掉签名中的实例参数 使得 class C object staticmethod def foo print foo C foo
  • 在 apache xmlrpc 客户端中记录输入/输出 xml

    我正在使用 Apache xmlrpc 使用 Java 构建 xmlrpc 客户端 但无法弄清楚如何记录输入 输出 xml 接收和发送的原始数据 我该怎么做呢 谢谢 我的解决方法是使用自定义传输 如下所示 也许有更优雅的方式来做到这一点 i
  • 如何将字符串公式变成“真正的”公式?

    I have 0 4 A1在单元格中 作为字符串 如何将这个 字符串公式 转换为真正的公式并在另一个单元格中计算其值 Evaluate可能适合 http www mrexcel com forum showthread php t 6206
  • 按键在嵌套数组深处查找

    假设我有一个对象 title some title channel id 123we options channel id abc image http asdasd com all inclusive block img jpg titl
  • LINQ 通常比同等的 SQL 语句慢吗

    如果我编写一个包含许多 group by 子句等的大型 SQL 语句 使用普通 SQL 可能是存储过程 会更快吗 还是 Linq 仅将其解析为非常好的 SQL 语句并很快给出结果 在某些情况下你may能够比 LINQ to SQL 更好地调
  • 如何使用 SharePoint Web 服务重命名文件?

    我有一个文档库的自定义定义 并且我尝试仅使用开箱即用的 Web 服务重命名库中的文档 使用提供的 名称 字段定义视图并尝试 LinkFilename 后 我对重命名文件的调用分别返回失败或忽略新值 如何使用 SharePoint Web 服
  • 实体框架、linq 函数和内存使用

    我是 EF 新手 我曾经使用数据集 表适配器和存储过程 我刚刚发现 EF 的简单性 并且发现 EF 方法可以为我的开发提供很多帮助 我有几个问题 我试图寻找他们的答案但徒劳 因为我总是与有以下情况的客户合作巨大的桌子 例如我拨打这个电话的事