添加 LINQ 的 LongCount 扩展方法是否有实际原因?

2024-05-18

LINQ 有 2 种计算可枚举数的方法:Count and LongCount。实际上,这两者之间的唯一区别是第一个返回一个int,而第二个返回一个long.

我不清楚为什么添加第二种方法。它的唯一用例似乎是处理超过 2B 元素的枚举。对我来说,这似乎是一个糟糕的决定,原因如下:

  1. 大多数 BCL 集合都由单维数组支持,这些数组的长度保证适合int。试图超越这一点会引发OverflowException / OutOfMemoryException.

  2. LongCount是 O(n) 因为IEnumerable很懒。如果你有一个可枚举的 3B 元素,你可以调用LongCount,然后再次迭代它(如果您想使用任何值,则必须这样做),您将添加额外的 3B 迭代,这将非常慢,并向开发人员隐藏它。

  3. 其他 LINQ 操作,例如ToArray / ToList,由于 (1),不支持具有 2B+ 元素的可枚举。

我在这里错过了什么,还是有更实际的原因LongCount加入?谢谢。


我对这个设计决策没有第一手的了解,但我可以提供一个有根据的猜测。

该方法对于IQueryable;该查询可以轻松地由巨大的数据库表支持。

我希望

IQueryable<Foo> q = whatever;
long result1 = q.LongCount();
long result2 = q.AsEnumerable().LongCount();

产生相同的答案。要求内存中查询使用返回不同类型的不同方法似乎是有悖常理的,特别是当实现可枚举版本非常容易时。

但正如我所说,这是一个有根据的猜测。希望真正从事此设计的人可能会插话。

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

添加 LINQ 的 LongCount 扩展方法是否有实际原因? 的相关文章

  • 如何使用 LINQ 获取唯一 id 列的最大值

    如何使用 LINQ 以最简单的方式编写此代码 SELECT MAX Game id AS MaxValue FROM Dim Game Try context Dim Games Max g gt g Game id
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var

随机推荐

  • Oracle JDBC 预取:如何避免 RAM 不足/如何使 oracle 更快高延迟

    使用 Oracle java JDBC ojdbc14 10 2 x 加载包含多行的查询需要很长时间 高延迟环境 这显然是 Oracle JDBC 中的默认预取默认大小 10 每 10 行需要一次往返时间 我正在尝试设置一个激进的预取大小来
  • 如何从引用的java项目访问静态资源(WEB-INF)文件夹中的文件?

    我有一个 Web 应用程序 其中包含一个作为 spring bean 公开的应用程序服务之一的配置 xml 文件 另外 我在同一工作区中有一个独立的 java 应用程序 它从其 pom xml 引用我的 Web 应用程序项目 它使用 Spr
  • Sendgrid System.ArgumentException:未知元素:html

    我刚刚将以下软件包更新到最新版本 a SendGrid SmtpApi 更新至 1 3 1 b SendGrid 更新至 6 0 突然间 WebTransport Deliver 方法不再存在 没问题 我已切换到 DeliverAsync
  • Angular 2可以通过路由参数传递对象吗?

    我可以使用一些建议来解决我面临的这个问题 为了尽可能地向您解释这一点 我创建了一个主要组件 Component selector main component providers FORM PROVIDERS MainService Mai
  • 在 Messenger 类中使用令牌的正确方法是什么?

    我正在使用 MVVM Light Toolkit 版本 3 0 3 19 From http blog galasoft ch archive 2010 03 16 whatrsquos new in mvvm light v3 aspx
  • Java 游戏开发:图形

    我是新来的 希望您能够提供帮助 Problem 在 JFrame 上显示动画时出现问题 看来我对 Java 图形的工作原理不够了解 不够了解 全球理念 假设我想制作一个游戏 电影 剪辑 为此 我需要这个 不 简单的动画开始工作 这个问题的一
  • 从字符串中删除某些字符

    我正在尝试删除某些字符 目前我的输出如下cityname district但我想删除cityname SELECT Ort FROM dbo tblOrtsteileGeo WHERE GKZ 06440004 Output B dinge
  • 运行使用wiremock存根的多个测试用例时“选择器循环等待选择”

    我在用着wiremock http wiremock org 用于模拟网络服务 我使用它来提供对我们正在测试的某些单元的服务访问 所以基本上我们有多个junit测试 它们使用来自wiremock的存根 但是 当我们一次运行多个测试 假设运行
  • SQLite 返回错误的 2013 年周数?

    我有一个简单的 SQL 来计算 SQLite 报告中的周数 SELECT STRFTIME W date column 2009 2012 年的数据是正确的 2013 年我总是得到错误的周数 例如 SELECT STRFTIME W 201
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 使用 XML 和 C# 创建 Word 文档

    我已经为报告创建了一个 xml 模板 用户应该能够通过我用 C 创建的程序添加信息以根据自己的需要个性化此报告 如何根据用户输入文本框的内容编辑实体的内容 然后将其显示在 Word 上 网上有大量有关使用 XML 和 C 创建 Word 文
  • ContentResolver的notifyChange方法是否也通知详细的Uri?

    在应用数据期间我使用notifyChange与Uri 假设我通知content com package my items 我还有详细的Activity显示数据来自content com package my items 1 是否通知 一般
  • 在哪里可以找到 OpenID 提供商 URL 列表? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我已经在我的网站上实现了 OpenID 但我很难找到 OpenID 提供商 URL 列表 我以为这很容
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 如何将粘在一起的单词分开?

    我有很多命名不好的文件 videoofmegoingtoschool avi 是否有一个库或某种算法可以正确地将其分离 video of me going to school avi 我不认为那里有什么 我可以想象一个程序 它使用单词词典并
  • Python:SSLError、握手错误、意外的 EOF

    我在使用 Python 请求连接到特定站点时遇到问题并收到此错误 HTTPSConnectionPool host XXXXXXXXX port 443 url 超出最大重试次数 由 SSLError SSLError bad handsh
  • jQuery:在动画期间禁用单击

    所以我正在做一个小测验 我想禁用里面所有内容的点击 qWrap当动画运行时 从而防止垃圾点击 我尝试使用 is animated 但没有效果 有任何想法吗 HTML div ul li class qContainer ul class q
  • 将项目升级到Android Studio 1.0(Gradle问题)

    首先 我对 android 开发 android studio gradle 非常陌生 所以如果我问了一个愚蠢的问题 请原谅我 我的团队一直在使用 android studio 的 beta 版本开发一个项目 我刚刚安装了新版本 1 0 并
  • 添加 LINQ 的 LongCount 扩展方法是否有实际原因?

    LINQ 有 2 种计算可枚举数的方法 Count and LongCount 实际上 这两者之间的唯一区别是第一个返回一个int 而第二个返回一个long 我不清楚为什么添加第二种方法 它的唯一用例似乎是处理超过 2B 元素的枚举 对我来