当前位置:编程学习 > C#/ASP.NET >>

LinQ是不是效率很低啊?

我写了一个程序。每隔50ms要求一组数据的最大值和最小值。我想Linq写起来不是很简单嘛。所以就用LinQ写了一段程序来实现。结果CPU占用率老高。我把这段程序改成for循环来实现,CPU占用率马上就降下来了。我就纳闷了。Linq不是号称高效吗? --------------------编程问答-------------------- 这我绝不同情。 --------------------编程问答-------------------- 不要随便换 --------------------编程问答-------------------- 50ms 。。 --------------------编程问答-------------------- 50ms   。。。。 --------------------编程问答--------------------
引用 1 楼 sp1234 的回复:
这我绝不同情。


啥叫不同情啊? --------------------编程问答-------------------- 我最近也遇到了cpu挺高的问题,我使用的是sql to linq不知道和这个有关系吗? --------------------编程问答--------------------
引用 6 楼 aofengdaxia 的回复:
我最近也遇到了cpu挺高的问题,我使用的是sql to linq不知道和这个有关系吗?


我现在对LinQ的印象很差
--------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 算法问题,如果你对LINQ不满意,你可以下载一个类似LINQ的,开源的框架,让你既有使用LINQ的方便特性,也有写SQL的那种“安全感”! --------------------编程问答-------------------- sp1234,木看懂啊。 --------------------编程问答-------------------- 学习~~~ --------------------编程问答-------------------- 不过我到是觉得linq是有一个特点,那就是如果少量数据查询的时候,很明显是比不上Sql编程。

但是数据量大的时候,linq的优势非常明显。

而且linq在第一次查询的时候,好像真的很慢,第二次就没有了。。不知道是什么机制。。

关于sp1234沙发的答复,大家看不懂就不要求书甚解了。。
sp1234大哥这样打醉拳又不是第一次了。呵呵。 --------------------编程问答-------------------- 向大家推荐一个优秀的 Linq to DB,http://cn.alinq.org 。 --------------------编程问答-------------------- 有这些疑问都是对linq运行机制不理解造成的。
linq说穿了,就是对sql的二次封装,使得对数据库的操作更安全更简洁。
对某些特定的语句,也许效率是不如sql的,但就大部分情况而言,对效率是没有影响的。
而且在使用频繁,操作复杂的情况下,比sql效率明显要高。
而且,linq最终执行的依然是sql语句,并不是什么另类的东西。
数据库只认sql语句,正如芯片只认机器码一样。 --------------------编程问答-------------------- 优化你的代码。 --------------------编程问答--------------------
引用 14 楼 foren_whb 的回复:
有这些疑问都是对linq运行机制不理解造成的。
linq说穿了,就是对sql的二次封装,使得对数据库的操作更安全更简洁。
对某些特定的语句,也许效率是不如sql的,但就大部分情况而言,对效率是没有影响的。
而且在使用频繁,操作复杂的情况下,比sql效率明显要高。
而且,linq最终执行的依然是sql语句,并不是什么另类的东西。
数据库只认sql语句,正如芯片只认机器码一样。


说的很在理,关键是看怎么用了。代码写的好,效率自然高! --------------------编程问答-------------------- 没注意啊?应该试试 --------------------编程问答-------------------- 不是吧 效率还可以的啊 --------------------编程问答-------------------- 效率性能的问题,要看什么情况了,针对普通的linq to Object一般来说linq的效率相对来说要低。
但是linq能够换来简洁的代码,并且很好阅读。
比如where string.StartsWith("xxxx")这样的过滤,就和for循环差不多。
所以适当选取使用。 --------------------编程问答-------------------- 刚学,。。。。。。。。。。。。。。。 --------------------编程问答-------------------- 不一定  linq不错  值得学习 --------------------编程问答-------------------- 我觉得还可以 代码还是很容易懂的!! --------------------编程问答-------------------- 搂主 访问数据库了?还是单纯的对象操作? --------------------编程问答-------------------- 单纯地对象操作 --------------------编程问答-------------------- linq to sql 对单表操作是比较快的。但多表操作就要慢些了。 --------------------编程问答-------------------- 比起一般程序员来说,Linq提供的sql解析机制要优化多了
楼主每50ms就做一次取值真是有点过分了,应该是linq对数组做了转换造成的开销,试试换个类型 --------------------编程问答-------------------- 欢迎加入.NET 开发群 78817973 交流 linq技术。 --------------------编程问答-------------------- linq很棒得

效率低 原因比较多,  --------------------编程问答-------------------- 数据库优化做好了效率也很高,LINQ也有它的特点,各有特色 --------------------编程问答-------------------- Linq是未来的一种趋势。 --------------------编程问答-------------------- 说的真多,写个循环测试,不就出来了。 --------------------编程问答-------------------- 个人意见:linq进行多表连接查询的时候,比sql要简单的多 --------------------编程问答-------------------- 受益良多  --------------------编程问答-------------------- 1秒钟更新20次???谁眼睛这么快? --------------------编程问答-------------------- linq的查询效率不错啊。 --------------------编程问答-------------------- 刚刚学习,受益匪浅 --------------------编程问答-------------------- 你代码问题,我查上万条数据,没出现你这情况 --------------------编程问答-------------------- linq的查询效率非常高,
比未经过优化的ado.net甚至更高。
生成的sql也比较优化的。

其他方面效率不咋地。 --------------------编程问答--------------------
引用 12 楼 jxyxhz 的回复:
不过我到是觉得linq是有一个特点,那就是如果少量数据查询的时候,很明显是比不上Sql编程。

但是数据量大的时候,linq的优势非常明显。

而且linq在第一次查询的时候,好像真的很慢,第二次就没有了。。不知道是什么机制。。

关于sp1234沙发的答复,大家看不懂就不要求书甚解了。。
sp1234大哥这样打醉拳又不是第一次了。呵呵。


他每次查询出结果后要循环把数据映射到实体对像上去,你说慢不?后面快应该是第一次读取后缓存了。
我自己写的个简易ORM也是这种情况。'=。=、 那位高手能否解救下。。 --------------------编程问答--------------------
引用 28 楼 projectdd 的回复:
linq很棒得

效率低 原因比较多,

我觉得linq效率比较高,因为linq是一种延迟执行的技术,定义/声明linq查询后,不论在何时何地都可直接获得其结果列表 --------------------编程问答-------------------- 我还是用ADO.NET了!之前也是用LINQ,慢的要死! --------------------编程问答-------------------- http://www.cnblogs.com/yangtongnet/archive/2010/06/22/1762697.html Linq效率测试!! --------------------编程问答-------------------- --------------------编程问答-------------------- 50ms一次我感觉有点太严重了......  

LINQ给我的第一印象是相当可爱了.

俺还是继续学习他 --------------------编程问答-------------------- 数据库操作用ADO,内存操作用LINQ  --------------------编程问答--------------------
引用 45 楼 woshimaikou 的回复:
数据库操作用ADO,内存操作用LINQ


学习了。。 --------------------编程问答-------------------- 获取LinQ操作数据比较麻烦 --------------------编程问答--------------------  也许你可以把你电脑c盘中的这个文件temp 改大一点   --------------------编程问答-------------------- linqtosql相对于纯dbo操作来说效率当然要低 --------------------编程问答-------------------- --------------------编程问答-------------------- 还可以吧,感觉还是挺好的。 --------------------编程问答-------------------- 我测试了一下,用sql执行100000条数据和用linq执行100000条数据的差距是:linq用的时间是sql的1.5倍,因此我认为sql是性能比较不错的 --------------------编程问答-------------------- 是这样的。虽然方便但速度没有SQL快 --------------------编程问答-------------------- LINQ 的查詢很先進。。。 --------------------编程问答-------------------- 预编译linq查询了吗? --------------------编程问答-------------------- 时间:单句 SQL语句执行速度:0.536ms ;Linq:2.038ms
多句【数据8000行】 SQL:1.96ms ;Linq:2.375ms
面向对象:SQL仅面向编程,Linq面向对象。

个人建议:if( 速度>oo){使用SQL;}
if(oo>速度){使用Linq;}

具体使用以项目而定,单个说linq或者SQL性能问题我个人觉得不够全面....
--------------------编程问答-------------------- linq 这个概念又点模糊,LZ是linq2sql  还是 linq2EF,如果是linq2sql的话,大数据量的时候不好使,linq2EF 还可以,推荐使用 --------------------编程问答-------------------- --------------------编程问答-------------------- 我觉得还可以 代码还是很容易懂的 很好用的 --------------------编程问答-------------------- --------------------编程问答-------------------- 哦123 --------------------编程问答-------------------- LINQ我感觉不是很低 --------------------编程问答-------------------- 感觉还不错 --------------------编程问答-------------------- 建议用ado.net entity framework --------------------编程问答-------------------- 要说快的话,只要算法上没什么问题话。感觉Linq不会慢!
不过最快的应该是用存储过程。 --------------------编程问答-------------------- 是挺慢的,我感觉! --------------------编程问答--------------------
引用 14 楼 foren_whb 的回复:
有这些疑问都是对linq运行机制不理解造成的。
linq说穿了,就是对sql的二次封装,使得对数据库的操作更安全更简洁。
对某些特定的语句,也许效率是不如sql的,但就大部分情况而言,对效率是没有影响的。
而且在使用频繁,操作复杂的情况下,比sql效率明显要高。
而且,linq最终执行的依然是sql语句,并不是什么另类的东西。
数据库只认sql语句,正如芯片只认机器码一样。


严重同意。。。。。支持下。 --------------------编程问答--------------------
引用 6 楼 aofengdaxia 的回复:
我最近也遇到了cpu挺高的问题,我使用的是sql to linq不知道和这个有关系吗?


对linq不熟的话建议不要乱用,linq查询可以有两种形式
IQueryable,IEnumerable
IQueryable是转成sql再去查询的
IEnumerable 是转成列表,然后在列表里查询,你可以想一下以前用gridview自带分页的效率了。。。 --------------------编程问答-------------------- 个人认为LINQ很像快餐,让你很快很高效的填包肚子,但没什么营养,吃久了还得绝症相当于死机。 --------------------编程问答-------------------- 如果你追求代码绝对的高效率低资源占有,那只有程序员的终级目标汇编!

--------------------编程问答-------------------- --------------------编程问答--------------------
引用 69 楼 qsq3 的回复:
个人认为LINQ很像快餐,让你很快很高效的填包肚子,但没什么营养,吃久了还得绝症相当于死机。


这话说的……太没谱了。请问你精通LINQ么? --------------------编程问答-------------------- 晕 有这么恐怖吗 --------------------编程问答-------------------- LINQ, 我很喜欢啊。不过楼主,你刷新也太快了吧。我也绝不同情! --------------------编程问答--------------------
引用 72 楼 ktei2008 的回复:
引用 69 楼 qsq3 的回复:

个人认为LINQ很像快餐,让你很快很高效的填包肚子,但没什么营养,吃久了还得绝症相当于死机。


这话说的……太没谱了。请问你精通LINQ么?

这是我个人的看法。我还认为LINQ执行效率烂。但linq开发效率高,所以成本低。把这些节省下来的成本投入到硬件上,相比之下性价比就高的多。这就是很多大项目使用linq的原因。 --------------------编程问答--------------------
引用 75 楼 qsq3 的回复:
引用 72 楼 ktei2008 的回复:
引用 69 楼 qsq3 的回复:

个人认为LINQ很像快餐,让你很快很高效的填包肚子,但没什么营养,吃久了还得绝症相当于死机。


这话说的……太没谱了。请问你精通LINQ么?

这是我个人的看法。我还认为LINQ执行效率烂。但linq开发效率高,所以成本低。把这些节省下来的成本投入到硬件上,相比之下性价比就高的多。这就是很多大项目……


什么需求用什么工具。效率不效率的,具体环境具体分析。 --------------------编程问答-------------------- 这么快就下结论就有点武断了吧。 --------------------编程问答-------------------- 谁说LINQ效率低....看你怎么用了~ --------------------编程问答-------------------- 关键是得 用得好 --------------------编程问答-------------------- 虽然我没用过LINQ,但是接触过一两句LINQ的语句。
LINQ的效率高应该是体现在开发上,相当于简化SQL,适用于开发过程的快捷。
LINQ的运行效率可能要低于SQL,但是不会低太多吧。
任何一个底层的驱动可能才是最高的运行效率吧,后面的只是形式、框架的易用上做了封装。 --------------------编程问答--------------------
引用 45 楼 woshimaikou 的回复:
数据库操作用ADO,内存操作用LINQ


嘿嘿 我也是这样操作的  --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼 sp1234 的回复:
这我绝不同情。


sp1234 老大的意思是,你要这么干,速度再慢都是活该,不能怪LINQ只能怪你自己。
然后,你应该懂了吧~

说说我的观点:
1、
linq TO sql比SQL语句肯定要慢,这是必须的,因为LINQ只是中介相当于媒婆~
但是,这个中介异常强大,可能过也就慢个0.001MS,所以就不用计较了

2、
有些人些的SQL语句还有可以优化的余地,执行起来是没有速度优势的
而LINQ为了减小与SQL语句在执行效率上的差距,所以实际执行的SQL语句是经过优化的

3、
SQL语句要求每次都进数据库查询,少不了文件读取和数据往返
LINQ还可以操作内存里的数据,此时的速度当然是比进库查询快得多了

4、结论
要求执行速度,需要进库就用SQL语句,如果对自身的T-SQL没信心,那就用LINQ,慢不了多少的
要求开发速度,可以用LINQ,当然如果你写SQL语句很快而且很优化,也可以用SQL语句
然后,对于那些超级需要效率的数据,其实根本不用进库去查询,放到内存里不是很好吗,定期更新数据库以保持一致,就行了。

sp1234 老大太严厉了,呵呵~~~

--------------------编程问答-------------------- 老牛们很怕linq 

因为他开发速度太快

老鸟们很怕linq

因为他是新东西

老鸟们很怕linq

因为他们没有加qq4711501 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 50ms就重复一次的计算,你不使用汇编我就觉得够一般般的了。这个问题是刻意走极端。 --------------------编程问答-------------------- 用Linq来写一个需要10分钟才出来的复杂计算(一个Linq查询其中会自动编译出有100万次子查询)是非常合适,而假设反之你要重复100万次超级简单的查询就不应该使用Linq。 --------------------编程问答-------------------- 我最近用到了LINQ的时候,老是报错,出现什么登录名“sa”错误?求救 --------------------编程问答-------------------- 。。。。数据库的登录名是错的吧 --------------------编程问答-------------------- 可以的话用扩展方法试试。 --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主说:每隔50ms要求一组数据的最大值和最小值。应该是Linq to Object,不是 Linq to SQL --------------------编程问答-------------------- 50MS代表了什么····你每次请求LINQ TO SQL contxt 都会产生数据的···能不慢么··50MS```` --------------------编程问答-------------------- 有这些疑问都是对linq运行机制不理解造成的。
linq说穿了,就是对sql的二次封装,使得对数据库的操作更安全更简洁。
对某些特定的语句,也许效率是不如sql的,但就大部分情况而言,对效率是没有影响的。
而且在使用频繁,操作复杂的情况下,比sql效率明显要高。
而且,linq最终执行的依然是sql语句,并不是什么另类的东西。
数据库只认sql语句,正如芯片只认机器码一样。

很支持这个言论。 --------------------编程问答-------------------- 用着挺爽的啊 --------------------编程问答-------------------- ding --------------------编程问答-------------------- 感觉蛮方便的 效率高低 应该分不同情况吧。 --------------------编程问答-------------------- linq to sql是先生成sql查询语句再执行,理论上对性能的影响不大。确实不大。

但兄弟们,linq不是只有to sql的。整个一个IEumerable都可以用linq去操作。这里就有玄机了。
拿where方法来说
我看过这里的代码,完全是用for循环去查找对象的。循环每个枚举成员,判断每个成员是否符合where的条件,符合返回不符合找下一个。每次都要与多个where参数进行比较。如果数据量大并且条件多的情况下性能当然是非常恶心。

如果你算法和数据结构学得好,大可自己写算法去封装实现查询。例如最简单的先排序再二分。 --------------------编程问答-------------------- 在开发中用得爽就行
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,