net里使用linq语句碰到的问题
来源:互联网 发布:手机淘宝秒杀在哪 编辑:程序博客网 时间:2024/06/08 18:08
背景: 我们的数据库使用了fluent nhibernate ,在C#中运用linq to sql 跟数据库交互。
今天早晨发现一个ajax请求需要4秒才能得到回应,这个请求只是在一个表里更新一行,虽然这个表有上万条数据,但我觉得花4秒也太多了。
于是找了个工具,nhibernate profiler(百度破解版),这个工具可以侦测一个http请求需要多少个数据库交互,以及每个交互用了多少时间。具体使用方法请百度之。
http://www.cnblogs.com/GaoHuhu/archive/2012/06/25/2562781.html
用了这个工具以后找到了原因。
问题及原因:
我们使用的时候是这样的:
先调用 var listItems = System.Linq.IQueryable.select(t=>t).toList(); (这个是linq语句,此句代码要执行1秒左右,返回数以千记的items)
再调用 var result = listItems.skip(n).take(m) (注意这个就不是linq了,这个是.net的查询,也需要花点时间)
正确方法:
var res = System.Linq.IQueryable.Where(whereCondition).OrderByDescending(keySelector1).Skip(skip).Take(take).ToList(); (这个完全是linq语句,只要执行十几毫秒)
类似的代码还有,这样也是第一步是linq语句,第二步是net查询,相当耗费时间:
var listItems = System.Linq.IQueryable.select(t=>t).toList();
return (from news in listItems where news.Id == id ).FirstOrDefault();
再看下面,跟上面的代码我感觉是等价的,所以慢啊:
var listItems = System.Linq.IQueryable.select(t=>t).toList();
foreach (var newse in listItems )
{
if (newse.Id != id)
continue;
Delete(newse);
return true;
}
总结: 尽量用linq语句直接告诉数据库做什么查询。而不是从数据库拿出所有数据后在.net里再操作
- net里使用linq语句碰到的问题
- 使用asp.net碰到的两个问题
- VC6.0里ComboBox碰到的问题
- C#LinQ语句的使用
- 使用libtool碰到的问题
- IAR使用碰到的问题
- 使用pyquery碰到的问题
- bootstrap使用碰到的问题
- 使用npm碰到的问题
- Fresco的使用碰到问题
- asp.net连接oracle9i碰到的问题
- asp.net连接oracle9i碰到的问题
- asp.net web.Config碰到的问题
- 问题:SVN使用碰到的问题
- VC6.0里ComboBox碰到的问题(续)
- 在cubieboard2里安装pptpd碰到的依赖问题处理
- css里碰到居中问题的一些总结
- 使用myfaces过程中碰到的问题
- 判断单链表是否有环并找到入口处以及判断两个单向链表是否相交
- 嵌入式 10个Linux常用的网络监控命令
- 绪论
- 【学习14】3.x绘制图形(DrawNode)
- centos 6.5 python 2.6.6 update python 2.7.5 (Only centos 6.5 64bit)
- net里使用linq语句碰到的问题
- 程序员技术练级攻略
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 如何解决Form中文乱码的问题
- 基础数学知识
- 数据结构第一章绪论
- Java中final的用法总结
- PEKING-1328-Radar Installation
- 作业调度框架 Quartz 学习笔记(二) -- 简单触发器(SimpleTrigger)