新足迹

 找回密码
 注册

精华好帖回顾

· 2015秋日本东北纪行 (2015-12-7) shintaku · 被忽视的宝宝 (2006-10-25) susan
· 到Canberra 看熱氣球節和 Enlighten Festival!! (2014-3-12) silvia · 买地建房 Plaster扫盲贴 (2010-10-23) fulong
Advertisement
Advertisement
查看: 1423|回复: 10

Scott Henselman这次挺丢人的,基础真的一般般 [复制链接]

发表于 2012-6-29 10:48 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整

评分

参与人数 1积分 +4 收起 理由
uowzd01 + 4 谢谢奉献,跪求解释

查看全部评分

Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2012-6-29 22:29 |显示全部楼层

LINQ 就是方便。 这种包装好了的东西怎么可能更快呢?

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
就像.net, java, 怎么可能快过直接和系统交互的 C,C++ 呢
头像被屏蔽

禁止访问

发表于 2012-6-29 22:33 |显示全部楼层

不过我基础也不好。看来,还有机会,哈哈

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整

评分

参与人数 1积分 +3 收起 理由
无视 + 3 你行的!

查看全部评分

发表于 2012-7-1 01:37 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 atransformer 于 2012-6-29 21:29 发表
就像.net, java, 怎么可能快过直接和系统交互的 C,C++ 呢


1. 从实现上讲linq速度应该是很快的,因为没有很复杂的数据结构,反射等,不是包装的就是慢的,用c写一个方法这也是一种包装

2. c#是赶不上c c++,但java速度已经和c++差别很小了,慢的原因也不是因为没有和系统互交(不确定这句话的意思,如需和系统打交道还是会和系统互交的)以前慢是因为是解释执行,现在快是因为jvm里jit,hotspot等很多技术支持,是拿复杂换效率,和c++的编译执行已经不是一个层面的东西了

评分

参与人数 2积分 +7 收起 理由
无视 + 3 感谢分享
atransformer + 4 感谢分享

查看全部评分

回忆是红色的天空

发表于 2012-7-1 23:27 |显示全部楼层

回复 无视 1# 帖子

此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
评论看过了,没看懂,跪求解释

评分

参与人数 1积分 +3 收起 理由
无视 + 3 u r kidding~~

查看全部评分

头像被屏蔽

禁止访问

发表于 2012-7-2 00:34 |显示全部楼层
此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 wil 于 2012-7-1 00:37 发表


1. 从实现上讲linq速度应该是很快的,因为没有很复杂的数据结构,反射等,不是包装的就是慢的,用c写一个方法这也是一种包装

2. c#是赶不上c c++,但java速度已经和c++差别很小了,慢的原因也不是因为没有和系统互交(不确定这 ...


.net, java 都要通过虚拟机。所以慢。我是低手,就这么理解的
Advertisement
Advertisement

发表于 2012-7-2 11:48 |显示全部楼层
此文章由 wil 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 wil 所有!转贴必须注明作者、出处和本声明,并保持内容完整
http://stackoverflow.com/questions/145110/c-performance-vs-java-c

查了一些近期的benchmark,大部分测试算法c++快于java(两倍到三倍的差异),少部分慢于jave。有了jit支持,java/c#第一次运行之后就和c++执行过程没什么区别了,谁速度更快些主要还是取决于谁的编译优化做的好,谁对特定硬件支持的好
回忆是红色的天空

发表于 2012-7-2 13:46 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
又看了一遍,自己把代码打了一遍,还是不懂

没看出来scot哪里犯了基本错误啊,然后那个iberserk的评论也不知所云。

You cheat with your example ! :-)

array is faster than LINQ:
Considering your code:

var enumerable = Enumerable.Range(0, 9999999);
var array = enumerable.ToArray();
the second line take 100ms....
If you do this:
var array = Enumerable.Range(0, 9999999).ToArray();
first example take 33ms... the second (LINQ) take 172ms

CQFD...

I coudn't expect LINQ to be faster than FOR....

发表于 2012-7-2 15:57 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2012-7-2 12:46 发表
又看了一遍,自己把代码打了一遍,还是不懂

没看出来scot哪里犯了基本错误啊,然后那个iberserk的评论也不知所云。

You cheat with your example ! :-)

array is faster than LINQ:
Considering your code:

var enumer ...


兄弟,你还真较真了,哈~~

在原文里面:

// approach 1

sw.Start();
var array = enumerable.ToArray();

注意2个statement的顺序,然后对array loop, enumerable.ToArray()很expensive.

在approach 2/3中,sw.start()在enumerable之前,但直接就对enumberable操作了。

公平的作法应该在approach 1中,将sw.start()放在var array = enumerable.ToArray()之后,才可以跟approach2 & 3比较。

scott盲目的相信compiler这是根源,怎么也要在IL的级别分析一下,用sw作benchmark固然是一个很重要的衡量指标,但不是问题的根源。

[ 本帖最后由 无视 于 2012-7-2 15:00 编辑 ]

评分

参与人数 1积分 +4 收起 理由
atransformer + 4 谢谢奉献

查看全部评分

发表于 2012-7-2 16:16 |显示全部楼层
此文章由 uowzd01 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 uowzd01 所有!转贴必须注明作者、出处和本声明,并保持内容完整
approach1 他好像有讲到toarray用了多少,for loop用了多少。如果放在toarray之后,approach1应该是9ms。除非下面这行是他后来改的

The "ToArray()" part takes 123ms and the for loop takes 9ms on my system. Arrays are super fast.

[ 本帖最后由 uowzd01 于 2012-7-2 15:18 编辑 ]

发表于 2012-7-2 16:30 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 uowzd01 于 2012-7-2 15:16 发表
approach1 他好像有讲到toarray用了多少,for loop用了多少。如果放在toarray之后,approach1应该是9ms。除非下面这行是他后来改的

The "ToArray()" part takes 123ms and the for loop takes 9ms on my system. Arrays are super fast.


我不确定这是不是他自己后来改的。

但他是在比较for和linq的区别,不能把准备数据的时间(ToArray)也计算在里面,如果有人已开始就打算用for loop,人家就不会用从enumerable转到array这一步,这是相对比较贵的一步,也是直接原因导致for loop对linq性能低下的原因。

评分

参与人数 1积分 +4 收起 理由
uowzd01 + 4 太给力了

查看全部评分

Advertisement
Advertisement

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部