读书人

相同的代码4.0性能比2.0差这么多?该

发布时间: 2012-01-14 20:02:35 作者: rapoo

相同的代码,4.0性能比2.0差这么多?
下面的代码用4.0编译比用3.5编译执行的时间高出许多,不知道大家跑出来的结果是不是和我一样,谁知道有什么详细的文档资料能解释这个现象?

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;using System.Data.SqlClient;using System.Security.Permissions;namespace ConsoleApplication1{ [SqlClientPermission(SecurityAction.Demand)] public class Class1 {  public void Test()  { } } class Program {  static void Main(string[] args)  {   Class1 c;   Stopwatch w = new Stopwatch();   w.Start();   for (int i = 0; i < 10000; i++)   {    c = new Class1();    c.Test();   }   w.Stop();   Console.WriteLine(w.ElapsedMilliseconds);  } }}


[解决办法]
一般高版本的插件多了自然就慢点。
[解决办法]
时间是不是花在了你引用的一些根本没用到的dll命名空间了,影响了一部分时间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Security.Permissions;
[解决办法]
楼主挺有钻研精神。电脑上没装4.0的,不然就测试一下。
[解决办法]
探讨
时间是不是花在了你引用的一些根本没用到的dll命名空间了,影响了一部分时间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Data.SqlClient;
using Syste……

[解决办法]
还这样的啊,以前一直没注意,原来没用的命名空间的引用也造成时间的的浪费啊。
学习了
[解决办法]
学习了
[解决办法]
在代码编辑窗口点右键,选择“组织Using”>“移除未使用的Using”,编译器可以自动将你没有用到的那些引用移除掉。
[解决办法]
mark,
[解决办法]
探讨

在代码编辑窗口点右键,选择“组织Using”>“移除未使用的Using”,编译器可以自动将你没有用到的那些引用移除掉。

[解决办法]
真没想到
[解决办法]
4.0内部的处理有复杂了。
[解决办法]
2.0 5ms
3.5 也是5ms
4.0 没有
[解决办法]
为何都用4.0了
[解决办法]
淡定,淡定!!
[解决办法]
嗯,是差很多,2.0耗时3毫秒,4.0耗时543毫秒
[解决办法]
探讨

时间是不是花在了你引用的一些根本没用到的dll命名空间了,影响了一部分时间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Data.SqlClient;
using Syst……

[解决办法]
命名空间也会影响效率,,,不太清楚。。。自己没证实过。。杯具。
[解决办法]
lz说的是编译速度还是运行速度?
------解决方案--------------------


这个,我想问下,怎么看时间的...
[解决办法]

探讨

时间是不是花在了你引用的一些根本没用到的dll命名空间了,影响了一部分时间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Data.SqlClient;
using Syst……

[解决办法]
探讨
嗯,是差很多,2.0耗时3毫秒,4.0耗时543毫秒

[解决办法]

没测试过。。。

用4.0写东西没有实际感觉出来它比2.0要慢。。。

如果这东西是没有确切能感觉出来的。。。

那不必太在意。。。
[解决办法]
bin文件夹中的没有用的dll删除掉
[解决办法]
不会的..我相信4.0
[解决办法]
探讨

引用:
嗯,是差很多,2.0耗时3毫秒,4.0耗时543毫秒


引用:
lz说的是编译速度还是运行速度?


不知道16楼是怎么测试的,如果几种情况的测试条件不完全相同(或十分接近)那么测试结果是没有参考意义的
.net4.0可能会比2.0慢一些,但是3ms和543ms的差别你应该知道错多少个数量级了吧……

[解决办法]
120倍的差距
[解决办法]
真的吗?
[解决办法]
感觉现在有必要整理下控件中封装的东西,尽量分开些 多次引用都行 不用的不引用 很多打包太多了就是这悲催结局了
[解决办法]
学习楼主专研精神
[解决办法]
dingqi...
[解决办法]
关注中....
[解决办法]
不太可能
如果4.0比2.0还慢 那岂不是倒退了


不知道楼主测试了多少次1W次还是10W次?
[解决办法]
把你的
C# code
[SqlClientPermission(SecurityAction.Demand)]
[解决办法]
我在开发中遵循一条XP原则,(由于采取TDD驱动开发所以)被证明为没有用的代码就应该删除掉。当我们删除(首先注释)掉一条代码,程序仍然可以通过测试验收,那么就说明这条代码应该删除。
[解决办法]
留名,关注。。。
看到lz在msdn也问了。
[解决办法]
持续关注= =
[解决办法]
探讨

引用:

引用:
嗯,是差很多,2.0耗时3毫秒,4.0耗时543毫秒


引用:
lz说的是编译速度还是运行速度?


不知道16楼是怎么测试的,如果几种情况的测试条件不完全相同(或十分接近)那么测试结果是没有参考意义的
.net4.0可能会比2.0慢一些,但是3m……

[解决办法]
没用上4.0,占位学习.
[解决办法]
关注。。。。。。。。。。
[解决办法]
一样
去瞧瞧IL代码
探讨
嗯,是差很多,2.0耗时3毫秒,4.0耗时543毫秒

[解决办法]
学习
学习

[解决办法]
估计到sp1会好一些,有不少以前靠非托管实现的,现在都是用纯.net来弄的。
另外以前也说过的4.0里面的Biginteger用的是n^2的算法,还不如3.5里面那个用分治来做的,更不用说各种FFT了。


[解决办法]
学习了!!!!
[解决办法]
越看越愚昧,.net性能真的不能再大幅优化了吗?
一直有个疑问,.net程序为什么不能把引用的程序集都拷贝到程序中,然后不用安装.net直接运行
这样可以根据使用到的内容进行优化
[解决办法]

探讨

把你的C# code
[SqlClientPermission(SecurityAction.Demand)]
注释掉试一试!

[解决办法]
没测试过,,,,,,,4.0 没用过。。
[解决办法]
learning......
[解决办法]
探讨

引用:

时间是不是花在了你引用的一些根本没用到的dll命名空间了,影响了一部分时间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Da……

[解决办法]
还没用4.0
[解决办法]
SecurityAction.Demand
要求调用堆栈中的所有高级调用方都已被授予了当前权限对象所指定的权限

在安全检查过程中,运行库遍历调用堆栈,检查堆栈中每个调用方的权限,然后确定是否已将要求的权限授予每个调用方。

遍历调用堆栈,跟调试差不多慢
[解决办法]
没用4.0,应该是有一点差别
[解决办法]
确实是相差不少
[解决办法]
看了各位的,学习了
[解决办法]
难道又让我学到了一手
[解决办法]
探讨

我在开发中遵循一条XP原则,(由于采取TDD驱动开发所以)被证明为没有用的代码就应该删除掉。当我们删除(首先注释)掉一条代码,程序仍然可以通过测试验收,那么就说明这条代码应该删除。

[解决办法]
热闹的
[解决办法]
围观围观了!
[解决办法]
原来没用的命名空间的引用也造成时间的的浪费啊。
学习了。
[解决办法]
计算机有些问题是说不清楚的。
[解决办法]
高版本的 一般来说都会比低版本的编译速度要慢一点 加了很多增加的功能 还有一些安全机制

就像sql 2008 比 sql 2008 就要慢上一点
[解决办法]
bumeibai
[解决办法]
引用的东西太多了,框架太大。。。!
[解决办法]
看了半天 又看到处理个结果但是没看见原因
[解决办法]
这个问题很重要吗。。
[解决办法]
探讨

还这样的啊,以前一直没注意,原来没用的命名空间的引用也造成时间的的浪费啊。
学习了

[解决办法]
我有次编译相当的慢,实在没办法,电脑重装了。编译速度立马就上去了。。。
[解决办法]
来学习一下
[解决办法]
学习学习~~~~~~~~~~
------解决方案--------------------


引用没有用到的命名空间、DLL 只影响编绎速度吧 不影响运行速度的


至于程序运行时间差别这么大` 个人认为可能是测试方法的原因

有可能也跟电脑本身有关,就算是在同一台电脑上测也有关系。
[解决办法]
跟测试方法其实也没有什么关系,因为lz给出测试代码来了。

实际去测试一下,把没用的(至少从lz的代码中看来是很明显多余增加的)

C# code
[SqlClientPermission(SecurityAction.Demand)]
[解决办法]
探讨

看了半天 又看到处理个结果但是没看见原因

[解决办法]
扯淡的真多……SP1234已经说的很清楚了
[解决办法]
呵呵。
[解决办法]
SP1234说的很好!
[解决办法]
装SP1试试
[解决办法]
问一下 想知道怎么看时间!!!
[解决办法]
关注下!
[解决办法]
学习学习~~
[解决办法]
IL代码是一样的,看不出差别,循环执行100次,在.net4.0下的效果没有太大差别。
[解决办法]
.net越强大,复杂性就越高,虽说.net4.0已经做了一定的优化,那可能只是总体上或者说某些方面,当具体应用到某一规则就不一定,看来这样的测试还真不可少。
[解决办法]
可能版本高的软件功能齐全,实现一般的功能反倒复杂
[解决办法]
学习了 顶sp1234
[解决办法]
每天逛逛论坛也能学些东西
[解决办法]
我就是要个分 等有问题好问
[解决办法]
学习了
[解决办法]
呵呵 都是高手呢
[解决办法]
来学习学习的
[解决办法]
微软不可能做退步的事情砸自己的脚,C#的效率是越来越高的,JIT也越来越强,无用的东西将会直接抛弃
[解决办法]
学习,有时候做的东西在不同的地方效率就是不太一样!
[解决办法]
会不会是VS的缘故,
[解决办法]
探讨

引用:

看了半天 又看到处理个结果但是没看见原因


原因还是自己找比较好。我也不清楚、懒的去找原因,因为我的开发中不需要这个被删掉的语句。

为什么要让别人“自己找原因”?你看到有这么多人,即使给了结果,都不自己去验证一下嘛!

[解决办法]
逛论坛很有收获啊
[解决办法]
学习了。
不过有位同学说的也有道理,虽然现在知道是哪里的问题了。但是问题的原因还没有找到。

读书人网 >C#

热点推荐