Linq之ToList
今晚遇到一个很奇怪的事情,我已经把所有数据拿出来了,然后在后台用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的更多相关文章
- 简述Linq中.ToList(), .AsEnumerable(), AsQueryable()的区别和用法
[TOC] 这3个方法的功能完全不同, 应按照具体业务场景使用. AsQueryable() 先说说什么是 IQueryable IQueryable 是当前的 data provider 返回的类型 ...
- LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”
我就不屁话,能一张图就解决的就不说话了 2015-03-28 14:53:24,440 [10] ERROR log - System.NotSupportedException: LINQ to E ...
- EntityFramework 7 Linq Contains In 奇怪问题
这篇博文纪录一下:当使用 EF7,Linq 实现类似 where filename in('','','') SQL 代码,使用 Contains 出现报错问题. project.json 配置文件( ...
- 复习linq
复习linq linq的英文是language integrated query.其中query的意思就是疑问或者计算机用语就是从资料库中提取信息的要求,可以理解为查询的意思.那么它翻译过来的话就是集 ...
- 为什么LINQ to XML的性能要优于XmlDocument?
一直很忙,压了很多贴,今天发一篇吧.后面的看心情吧. 今天群里有人问如何解析web.config方便,然后我就推荐了Linq to XML,然后就有人说“我宁可XmlDocument,再SeleteN ...
- static,你还敢用吗?(二)
为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...
- "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案
今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...
- ASP.NET 访问共享文件夹
配置代码: var dataProtection = new Microsoft.AspNet.DataProtection.DataProtectionProvider(new DirectoryI ...
- NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”
几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...
随机推荐
- AWR Report 关键参数详细分析
WORKLOAD REPOSITORY report for DB Name DB Id Instance Inst num Startup Time Release RAC CALLDB 12510 ...
- saltstack之crontab管理用法
一.创建定时任务 crontab: #脚本脚识 cron.present: #模板:cron 计划任务 功能:present - name: /usr/sbin/ntpdate times.aliyu ...
- Hibernate原生SQL查询数据转换为HQL查询数据方法
HQL形式:(构造方法不支持timestamp类型) public List<Device> queryByMatherBoardId(String matherBoardId) { St ...
- hosts文件配置及主要作用
hosts文件位于" C:\Windows\System32\drivers\etc "目录下,用于转换名字与IP地址的转换. 在浏览器中通过域名访问网站,首先查看hosts文件中 ...
- 登录Tomcat控制台
在http://localhost:8080界面中,右上角有三个按纽对应着三个控制台:Server Status控制台,Manager App控制台和Host Manager控制台.Server St ...
- Druid对比Redshift
Redshift 内部使用了亚马逊取得了授权的ParAccel 实时注入数据 抛开可能的性能不同, 有功能性的不同 Druid 适合分析大数据量的流式数据, 也能够实时加载和聚合数据一般来讲, 传统的 ...
- MySQL分库备份与分表备份
MySQL分库备份与分表备份 1.分库备份 要求:将mysql数据库中的用户数据库备份,备份的数据库文件以时间命名 脚本内容如下: [root@db01 scripts]# vim backup_da ...
- 解决python pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
解决python pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') 学习了:ht ...
- Fireworks层与蒙版的概念和用法
添加热点也是可以嵌套的 切片工具将自动保存在网页图层,并且可以导出为图像 组合为蒙版就是让一部分图形显示的填充为一幅图片的东西,删除蒙版即可将其转换为一个普通的图层,否则还可以移动位置
- 《暗黑世界V1.4》API说明文档
<暗黑世界V1.4>API说明文档 阵法位置示意图 上方: 下方: 账号注册 100 请求信息 { username str ...