今晚遇到一个很奇怪的事情,我已经把所有数据拿出来了,然后在后台用C#代码根据业务对数据进行处理,大抵都是用linq进行一些where、any、select的处理,中间还夹杂着两三个foreach,结果当数据稍微多一点,直接卡死!

一步步地把觉得可能会耗性能的操作都注释,最后发现一个只有一条数据的Enumerable变量,在做.Any()判断时,都耗时0.5秒左右!顿时崩溃……最后把所有需要处理的数据ToList一下,OK,收工!

没有写ToList操作,是因为前阵子看了网上有人说ToList耗性能,So……不过想了想,其实是自己理解不到位呀。在不需要对Where出来的数据进行操作时,直接使用Enumerable,提高性能是有道理的。但需要对Enumerable数据进行更多的处理时,是不是因为变量引用的关系,后续的数据操作还是引用到原始的数据源上,从而导致性能下降呢?这只是我个人的想法,接下来需要好好研究下~~~

顺便附上MSDN里的相关资料:Enumerable.ToList<TSource> 方法

最后贴上一些代码,在作为备忘时,希望大家指点代码中需要优化的地方:)

subPickSampleList、bottleList、mainList等都是List数据源。最后是往一个DataTable里添加Row数据。
   var subPickSampleList = pickSampleList.Where(i => boilerGasType == null || (i.PickID.ToString() != boilerGasType.PickId)).OrderBy(i => i.MonitorSitePlace).ToList();
var myBottleList = bottleList.Where(b => subPickSampleList.Select(ps => ps.MonitorSampleID).Contains(b.MonitorSampleID)).ToList();
var bottleMainList = mainList.Where(i => i.BottleID != null).ToList();
foreach (var sample in subPickSampleList)
{
var siteBottle = myBottleList.Where(i => i.MonitorSampleID == sample.MonitorSampleID).ToList();
var siteBottleId = siteBottle.Select(b => b.BottleID).ToList();
var myMain = bottleMainList.Where(i => siteBottleId.Contains(i.BottleID.Value)).ToList(); if (!myMain.Any())
{
continue;
}
var newContentRow = contentTable.NewRow(); #region initialize a NewRow newContentRow["PickDate"] = sample.PickTime == null ? "-" : sample.PickTime.Value.ToString("MM/dd");
newContentRow["SecondCode"] = siteBottle.First().SecondCode;
newContentRow["SitePlace"] = sample.MonitorSitePlace; foreach (var item in otherItemList)
{
foreach (var main in myMain)
{
if (main.Item == item)
{
var result = resultList.First(i => i.MainSampleID == main.MainSampleID);
newContentRow[item] = result.RoundValue;
break;
}
}
} #endregion contentTable.Rows.Add(newContentRow); }

Linq之ToList的更多相关文章

  1. 简述Linq中.ToList(), .AsEnumerable(), AsQueryable()的区别和用法

    [TOC] 这3个方法的功能完全不同, 应按照具体业务场景使用. AsQueryable() 先说说什么是 IQueryable IQueryable 是当前的 data provider 返回的类型 ...

  2. LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”

    我就不屁话,能一张图就解决的就不说话了 2015-03-28 14:53:24,440 [10] ERROR log - System.NotSupportedException: LINQ to E ...

  3. EntityFramework 7 Linq Contains In 奇怪问题

    这篇博文纪录一下:当使用 EF7,Linq 实现类似 where filename in('','','') SQL 代码,使用 Contains 出现报错问题. project.json 配置文件( ...

  4. 复习linq

    复习linq linq的英文是language integrated query.其中query的意思就是疑问或者计算机用语就是从资料库中提取信息的要求,可以理解为查询的意思.那么它翻译过来的话就是集 ...

  5. 为什么LINQ to XML的性能要优于XmlDocument?

    一直很忙,压了很多贴,今天发一篇吧.后面的看心情吧. 今天群里有人问如何解析web.config方便,然后我就推荐了Linq to XML,然后就有人说“我宁可XmlDocument,再SeleteN ...

  6. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  7. "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案

     今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...

  8. ASP.NET 访问共享文件夹

    配置代码: var dataProtection = new Microsoft.AspNet.DataProtection.DataProtectionProvider(new DirectoryI ...

  9. NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

    几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...

随机推荐

  1. Oracle数据库中的所有用户名

    select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,systemselect * from all_users;  查看你能管理的所有用户 ...

  2. OpenShift应用镜像构建(1) S2I tomcat 镜像定制

    参考并感谢https://www.jianshu.com/p/fd3e62263046 在对接项目制作应用镜像的过程中,经常发现避免不了的是需要写Dockerfile,(当然另外一种方式是直接run一 ...

  3. Context Menus

    转载:http://open.chrome.360.cn/extension_dev/contextMenus.html 内容 清单 范例 API 参考: Chrome.contextMenus 方法 ...

  4. eclipse安装pydev

    eclipse是常用的用来写java代码的IDE,但是其实也可以用来写python代码,只需要配置好pydev即可. 第一步 打开eclipse,点击Help,install new sofeware ...

  5. 关于typedef的用法总结(zz)

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多 的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一 ...

  6. 解决html视频播放只有声音没有图像的办法

    HTML5中并没有指定视频解码器,它留给了浏览器来决定. MP4有四种编码格式(MPEG4(DivX),MPEG4(Xvid),AVC(H264),HEVC(H265)): 只有使用AVC(H264) ...

  7. Log文件太大,手机ROM空间被占满

    客户要装车,进行项目验收了. 今天拿着几台手机去客户处,其中有一台手机从昨天晚上开始就一直开着我们的APP,今天早晨打开手机发现APP没有反应了. 在程序列表中将其杀掉,然后再启动程序,发现程序不能启 ...

  8. bash: hadoop:command not found

    这种情况应该是hadoop的bin环境变量没有配置好 打开 gedit ~/.bashrc 修改 export HADOOP_HOME=/home/hadoop1/softwares/hadoop- ...

  9. automake--关于两个文件configure.in和Makefile.am的编写

    http://blog.csdn.net/shanzhizi/article/details/30251763 automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Mak ...

  10. ztree3.5.02选中结点时报错

    ztree3.5.02选中结点时报错 更新jquery版本后,使用jquery1.1.1,左键点击Tree里的节点的时候报错,虽然不影响显示,但是在chrome控制台显示报错 Uncaught Typ ...