为什么一个分号运行的速度比赋值操作的速度还要慢?

wdh123love 2016-05-09 12:19:45
先说想法:运行1,200,000,000次“;”和同样次数的赋值操作;计算它们的时间,并比较
预期:前者应该比后者用的时间略小
问题:此次测试结果与预期不符,差别较大,高手帮忙解析下原因
测试结果图片:

源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using ThreadingTest;

namespace test
{
public class Test {
private delegate void Calculation(dynamic T1, dynamic T2);
public Test() {
Console.WriteLine("不做任何运算 运算时间:" + UseTime(WithOut, 6, 6));
Console.WriteLine("赋值 运算时间:" + UseTime(Ass, 6, 6));
}
//不做任何运算(做样板)
public static void WithOut(dynamic num1, dynamic num2 = null)
{
dynamic index;
dynamic num = num1;
index = num;
for (int j = 0; j < 12; j++)
for (int i = 0; i < 100000000; i++)
{
;
}
}
//赋值
public static void Ass(dynamic num1, dynamic num2 = null)
{
dynamic index;
dynamic num = num1;
for (int j = 0; j < 12; j++)
for (int i = 0; i < 100000000; i++)
{
index = num;
}
}

private double UseTime(Calculation fun, dynamic T1, dynamic T2 = null)
{
DateTime BeginTime = DateTime.Now;

fun(T1, T2);

DateTime EndTime = DateTime.Now;
TimeSpan UseTime = EndTime - BeginTime;

return UseTime.TotalSeconds;
}

}
class Program
{
static void Main(string[] args)
{
//测试多线程效率比单线程的快多少
//Threading T = new Threading();

//CPUTest cpuTest = new CPUTest();

Test T ;
for (int i = 0; i < 10;i++ )
T = new Test();

int k;
k = int.Parse(Console.ReadLine());
}
}
}

...全文
308 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbaldy 2016-05-12
  • 打赏
  • 举报
回复
引用 16 楼 shingoscar 的回复:
http://download.csdn.net/download/shingoscar/9516574


用你的程序跑的,还是慢,你的真是神U

bigbaldy 2016-05-11
  • 打赏
  • 举报
回复
引用 12 楼 shingoscar 的回复:
你是不是应该换台电脑了
单位机器i7 2600,你的什么CPU,这么快?目前最快的i7 6700k也就比2600快个30%多,你这怎么快了3倍?
Poopaye 2016-05-11
  • 打赏
  • 举报
回复
引用 15 楼 bigbaldy 的回复:
[quote=引用 12 楼 shingoscar 的回复:] 你是不是应该换台电脑了
单位机器i7 2600,你的什么CPU,这么快?目前最快的i7 6700k也就比2600快个30%多,你这怎么快了3倍?[/quote] i3而已,我测了好多次都是这样 http://download.csdn.net/download/shingoscar/9516574
cheng2005 2016-05-09
  • 打赏
  • 举报
回复
别附加调试器,直接运行exe
wdh123love 2016-05-09
  • 打赏
  • 举报
回复
自己顶一下
wdh123love 2016-05-09
  • 打赏
  • 举报
回复
引用 12楼Poopaye 的回复:

你是不是应该换台电脑了

[quote=引用 8 楼 bigbaldy 的回复:]
我的测试结果,两者几乎没有区别,release版的
[/quote]为什么你们的电脑算的速度辣么快
___紫菜 2016-05-09
  • 打赏
  • 举报
回复
楼主很闲!
Poopaye 2016-05-09
  • 打赏
  • 举报
回复

你是不是应该换台电脑了

引用 8 楼 bigbaldy 的回复:
我的测试结果,两者几乎没有区别,release版的
Poopaye 2016-05-09
  • 打赏
  • 举报
回复
1、编译为Release版本 2、不要在VS中运行 3、用Stopwatch计时 4、不要在意第一次的时间,因为有些对象可能要再首次使用时生成 最后可以去看Release编译出来版本,index = num;这行已经被优化掉了,所以2个方法是完全一样的
荖司机 2016-05-09
  • 打赏
  • 举报
回复
引用 9 楼 sgyiliya 的回复:
2楼和8楼应该是正确的。 调试状态或者debug里面的EXE的执行会受到一些调试参数的影响,那些参数可以设置,但是太复杂,不是很清楚那些参数。
+1
sgyiliya 2016-05-09
  • 打赏
  • 举报
回复
2楼和8楼应该是正确的。 调试状态或者debug里面的EXE的执行会受到一些调试参数的影响,那些参数可以设置,但是太复杂,不是很清楚那些参数。
bigbaldy 2016-05-09
  • 打赏
  • 举报
回复
我的测试结果,两者几乎没有区别,release版的
  • 打赏
  • 举报
回复
不知道Frame内部对只有一个分号的代码块做了什么事情,按 C# semicolon 或者 C# ; 搜索不到相关文章
mlxwl2013 2016-05-09
  • 打赏
  • 举报
回复
编译器会优化,优化后两者只相差一次赋值。
gw6328 2016-05-09
  • 打赏
  • 举报
回复
程序从启动到运行还是有差别的,所以现在有一个在前面,有一个在后面这个是有区别的,交换一下位置,交替运行计算平均值等。
wdh123love 2016-05-09
  • 打赏
  • 举报
回复
引用 2 楼 wddw1986 的回复:
别附加调试器,直接运行exe
结果一样~~
xuzuning 2016-05-09
  • 打赏
  • 举报
回复
这种测试是没有意义的,但测试结果是正确的 至于空循环内部做了什么,这要看内部实现才能知道

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧