zoukankan      html  css  js  c++  java
  • .where(provider).FirstOrDefault()和.FirstOrDefault(provider)的性能比较

    最近遇到一个关于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的其它方法也都有着区别,在应用的时候查看一下该方法的类型应该是有帮助的。

  • 相关阅读:
    九宫格小游戏源码分享
    DeviceOne 竟然做出来如此复杂的App
    DeviceOne 让你一见钟情的App快速开发平台
    MySQL初始化
    MySQL的操作
    MySQL
    Library
    Python模块
    Anaconda的使用
    面向对象之成员修饰 特殊成员 methclass
  • 原文地址:https://www.cnblogs.com/wuxiangjiang/p/3867186.html
Copyright © 2011-2022 走看看