最近遇到一个关于Linq的问题,
.where(provider).FirstOrDefault();和.FirstOrDefault(provider);的性能比较

关于这个主要有以下三种说法,但这方面的资料比较少,我找到的就下面着几个地方。

第一种说法:.where(provider).FirstOrDefault()比较快,
支持这个观点的资料:http://stackoverflow.com/questions/8663897/why-is-linq-wherepredicate-first-faster-than-firstpredicate

第二种说法:.FirstOrDefault(provider)比较快
感觉FirstOrDefault更加直接有效。

第三种说法:差不多一样快,这种说法也比较多,因为从linq的lazy来说及两种方法核心都是用List.GetEnumerator的来说应该是一样的
支持这个观点的资料:http://prashantvc.wordpress.com/2013/03/07/where-firstordefault-vs-firstordefault/

别人说的做为参考,还是自己测试一下


但通过测试的结果貌似是验证第一种说法。

最后在msdn上找到了我认为的答案
http://msdn.microsoft.com/en-us/library/bb882641.aspx

结果是,这两种性能完全看data的provider
有的情况直接(Immediate)执行快,有的情况延时的(Deferred) 快
比如说data是连接数据库,或者『wellcoded』的远端数据源,Deferred  streaming肯定更快
但是如果是完全备置的数据而且索引良好访问顺畅,那直接(Immediate)执行会快点(主要是少了一层yeild)。

这个具体可以通过上面的msdn网站查找其类型。

ps:这个地方的应用不局限于这两种方法,Linq的其它方法也都有着区别,在应用的时候查看一下该方法的类型应该是有帮助的。

.where(provider).FirstOrDefault()和.FirstOrDefault(provider)的性能比较的更多相关文章

  1. Guice 学习(六)使用Provider注入服务( Provider Inject Service)

    1.定义接口 package com.guice.providerInject; import com.google.inject.ProvidedBy; public interface Servi ...

  2. Developing a Custom Membership Provider from the scratch, and using it in the FBA (Form Based Authentication) in SharePoint 2010

    //http://blog.sharedove.com/adisjugo/index.php/2011/01/05/writing-a-custom-membership-provider-and-u ...

  3. 【最后一篇API译文】Android开发-API指南- Contacts Provider

    Contacts Provider 今年加入了某字幕组,加之杂事颇多,许久未添新文了,惭愧之极. 在听闻 Google 即将重返中国后,近日忽又发现官方网站正在放出 API 中文版,比如本文.当然不是 ...

  4. Android开发-API指南- Calendar Provider

    Calendar Provider 英文原文:http://developer.android.com/guide/topics/providers/calendar-provider.html 采集 ...

  5. Calendar Provider

    英文原文:http://developer.android.com/guide/topics/providers/calendar-provider.html 关键类 CalendarContract ...

  6. 【React.js小书】动手实现 React-redux(五):Provider - 方志

    我们要把 context 相关的代码从所有业务组件中清除出去,现在的代码里面还有一个地方是被污染的.那就是 src/index.js 里面的 Index: 1234567891011121314151 ...

  7. Dubbo No provider问题排查思路

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 不想看字的同学可直接划到底部查看思维导图 问题分析 使用过Dubbo的朋友很多都碰到过如下报错 ...

  8. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  9. Ionic2学习笔记(5):Provider

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5547646.html             Provider是一种为App提供数据源的方式, 举个 ...

随机推荐

  1. 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想

    Delphi 是一个基本上被我遗忘的工具, 要不是在使用RapidSql , 我是收不到Embarcadero 公司发出的邀请来參加Delphi XE5的公布会的. 有人可能要问为什么是Embarca ...

  2. android113 自定义进度条

    MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...

  3. MySQL DBA教程:Mysql性能优化之缓存参数优化

      在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感 ...

  4. APT源

    Debian 6.0.7 deb http://mirrors.163.com/debian squeeze main non-free contribdeb http://mirrors.163.c ...

  5. mongodb环境部署

    mongodb 环境部署 1.环境说明 安装软件:mongodb-linux-x86_64-.tgz 软件安装位置:/usr/local/mongodb 数据存放位置:/var/mongodb/dat ...

  6. 在虚拟机安装64位系统提示,此主机支持Intel VT-x,但Intel VT-x处于禁用状态

    进入BIOS - Security - Virtualization - Intel (R) Virtualization Technology 将 Disabled 改为 Enabled 即可

  7. (转)使用OpenVPN的一些注意事项

    原文地址:http://www.365mini.com/page/16.htm 本文介绍的只是OpenVPN连接或使用过程中的一些注意事项,如果你尚未下载安装OpenVPN,你可以点击查看OpenVP ...

  8. 技术QQ群

    欢迎加入moss技术交流群. 欢迎加入微信技术交流群.

  9. 隐藏/显示 我的电脑盘符驱动…

    组策略里更改即可:点击"开始"→"运行",输入"gpedit.msc",打开组策略.在窗口左侧的"本地计算机策略"中依次 ...

  10. ListView 实现多选/单选

    http://blog.csdn.net/ljfbest/article/details/40685327 ListView自身带了单选.多选模式,可通过listview.setChoiceMode来 ...