迭代 Linq 结果时出现奇怪的缓慢现象

2024-01-01

在探索最近的林克问题 https://stackoverflow.com/questions/1582054/handling-temporary-calculation-in-linq我注意到该算法似乎相当慢。深入挖掘后,我注意到这不是 linq 代码,而是随后结果的输出花费了很长时间。 (顺便说一句,感谢 Marc Gravel 踢出了我见过的最流畅的 Linq。)

Code:

        DateTime dt = DateTime.Now;
        Console.WriteLine("Alg Start " + dt.Second + "." + dt.Millisecond);

        var qry = from l in Enumerable.Range(100000, 999999)
                  let s = l.ToString()
                  let sReversed = new string(s.Reverse().ToArray())
                  from i in Enumerable.Range(3, 9)
                  let t = (l * i).ToString()
                  where t == sReversed
                  select new { l, i };

        dt = DateTime.Now;
        Console.WriteLine("Alg End " + dt.Second + "." + dt.Millisecond);

        foreach (var row in qry)
            Console.WriteLine("{0} x {1} = {2}", row.l, row.i, row.l * row.i);

        dt = DateTime.Now;
        Console.WriteLine("Disp End " + dt.Second + "." + dt.Millisecond);

Output:

Alg Start 20.257
Alg End   20.270
109989 x 9 = 989901
219978 x 4 = 879912
1099989 x 9 = 9899901
Disp End  31.322

.13 秒计算并超过 11 秒显示?!?这是什么原因呢?


原因是查询在您枚举之前并未实际运行。在 LINQ to 对象中,它只是设置一堆委托,当您迭代枚举器时会调用这些委托。如果您将 ToList() 添加到查询中以具体化它,您会发现所花费的时间将转移到设置并远离显示。

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

迭代 Linq 结果时出现奇怪的缓慢现象 的相关文章

随机推荐

  • 更改文件的单个字符

    我需要更改文件中的单个字符 我不想使用像这样的辅助文件 伪代码 read theFile change theFile write theFile2 erase theFile rename theFile2 theFile 因为通过这种方
  • 通过 Javascript 查找何时在 EPUB FXL 中查看页面

    是否可以找出何时使用 Javascript 查看 EPUB 固定布局的页面 有 DOMContentLoaded 事件 但相邻页面在 iBooks 中预加载时也会触发此事件 导致动画或声音在页面可见之前启动 不 这不对 这是iBooks的一
  • 如何将正则表达式的匹配分配给变量?

    我有一个文本文件 其中包含各种条目 每个条目都以包含所有星号的行结束 我想使用 shell 命令来解析该文件并将每个条目分配给一个变量 我怎样才能做到这一点 这是一个示例输入文件 Field1 Lorem ipsum Data to mat
  • 将 VARCHAR 时间戳转换为 TIMESTAMP?

    我在 MySQL 数据库中有一个格式为 17 16 28 Sep 13 2011 PDT 的时间戳 数据库中字段的类型是VARCHAR 我想将这个 VARCHAR 转换为 MySQL 中 TIMESTAMP 类型的字段 我尝试了几个本网站其
  • 如何让 slc 命令在 Ubuntu 上运行?

    我已经使用安装了 Strongloopnpm install g strongloop在我的 Ubuntu 14 04 服务器上 这slc命令不起作用 它说 The program slc is currently not installe
  • 使用实体框架更新外键

    我再次遇到了实体框架的问题唷 我正在尝试使用外键更新表 我在插入时遇到问题 但通过编辑 edmx 文件解决了这个问题 我使用以下代码来更新与角色表具有外部关系的用户表 Domain Data Role role db Role FirstO
  • 使用selenium打开的Chrome页面仍然是空白

    我正在尝试保存网页的屏幕截图 为此我尝试使用 Selenium 问题是 一旦打开网页 URL 中的 data 就会保持空白 这是我的代码 from selenium import webdriver options webdriver Ch
  • 如何以相反的顺序打印文件中的行

    我正在尝试以相反的顺序打印文件 我正在使用数组来保存每行数据 到目前为止 我能够按正常顺序打印每一行 index 是我指的行数 FuncIndex 是同一件事 但已在函数中再次声明 file fopen quotes data r whil
  • 更改 spring-boot 中默认的 Mongo 连接池大小

    我想更改java mongodb驱动程序提供的连接池的默认大小根据 mongo 文档 这是 100 下面是我用来自定义连接池大小的mongo客户端bean 参考这个问题 https stackoverflow com questions 2
  • 解释这个 C 程序的输出

    在以下位置找到此代码C 谜题 http www gowrikumar com c index php include
  • Zend 打开 Zend/Application.php 失败

    好的 我对 Zend 还比较陌生 我创建了一个新的应用程序并开始构建基于的身份验证系统a guide http akrabat com zend auth tutorial 但是 服务器正在排除内部服务器错误 在检查 PHP 错误日志时 我
  • 如何使用System.Net.Mail设置退回邮件地址?

    我正在尝试实施可变信封返回路径 VERP http en wikipedia org wiki Variable envelope return path管理电子邮件地址的方法 即 当我发送的电子邮件被退回时 我希望将其发送到特定的电子邮件
  • 如何在我的 ejs 文件中包含 bootstrap 文件?

    因此 我已经使用 npm bootstrap 3 安装了 bootstrap 但是当我尝试在我的应用程序中包含来自 node modules 的 bootstrap min css 文件时 它在我的控制台中显示此错误 错误信息 在网络选项卡
  • 如何使用 capistrano 3 部署特定修订版

    如何使用 Capistrano 3 部署特定的 git 修订版 Capistrano 2 9 方法不再有效 cap S revision 80655da8d80aaaf92ce5357e7828dc09adb00993 deploy inv
  • 使用特征库从旋转矩阵中获取横摇、俯仰和偏航

    我需要从旋转矩阵中提取横滚 俯仰 偏航角 并且我想确保我所做的事情是正确的 Eigen Matrix lt simFloat 3 1 gt rpy orientation toRotationMatrix eulerAngles 0 1 2
  • 在过滤分支之后将每个人重新基于更改的 git 历史记录

    我们的 git 存储库历史上有一堆不再需要的大文件 我想使用 Pro Git 中解释的过滤分支技术删除它们 http git scm com book en v2 Git Internals Maintenance and Data Rec
  • Zoho API V2 更新记录

    我正在尝试使用 Zoho API 版本 2 在潜在客户中进行简单的记录更新 我使用 PHP 和 CURL 此调用的示例代码 更新记录中的单个字段 如下 apiUrl https www zohoapis com crm v2 Leads v
  • 如何在 Spring 中缩小动态 HTML 响应?

    遵循 Google 的 pagespeed 建议 我希望缩小 Spring 应用程序的 HTML 响应 我指的不是 GZip 而是在发送 HTML 之前从 HTML 中删除注释和空格 我想动态地执行此操作 而不是在我的模板中执行此操作 我的
  • cookiejar 对象可以被 pickle 吗?

    我尝试像这样腌制 CookieJar 对象 import cookielib import pickle dumpFile open cookie dump w cj cookielib CookieJar pickle dump cj d
  • 迭代 Linq 结果时出现奇怪的缓慢现象

    在探索最近的林克问题 https stackoverflow com questions 1582054 handling temporary calculation in linq我注意到该算法似乎相当慢 深入挖掘后 我注意到这不是 li