温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中var、int、object性能比较

发布时间:2020-08-05 02:44:18 来源:网络 阅读:1915 作者:jayshsoft 栏目:编程语言

var关键字是.net3.5推出的关键字,主要是让编译器自动推断并判断变量类型,类似javascript中的var。

在使用一些性能优化软件时,在代码优化时,我发现不管定义什么类型的变量,变量的类型都统统换成var。难道var的性能比具体的类型和object都要高?

 

实践出真知:

新建一个控制台应用程序

 

class Program {         static void Main(string[] args) {             for (int i = 0; i < 10; i++)             {                 Test();                 Console.WriteLine();             }                        Console.Read();         }         public static void Test()         {             Stopwatch stw = new Stopwatch();             Stopwatch stw1 = new Stopwatch();             Stopwatch stw2 = new Stopwatch();             /*Object性能测试 */             stw2.Start();//开始时间             List<int> intlist3 = new List<int>();             for( int i = 0; i < 10000000; i++ ) {                 object index = i;//使用object转入和转出                 intlist3.Add((int)index);             }             stw2.Stop();             Console.WriteLine("obj:{0}", stw2.Elapsed.Ticks);             /*Var 性能测试 */             List<int> intlist = new List<int>();             stw1.Start();             for( int i = 0; i < 10000000; i++ ) {                 var index = i;//使用var转入和转出                 intlist.Add(index);             }             stw1.Stop();             Console.WriteLine("Var:{0}", stw1.Elapsed.Ticks);             /*Int 性能测试 */             List<int> intlist2 = new List<int>();             stw.Start();//重新开始计时             for( int i = 0; i < 10000000; i++ ) {                 int index = i;//使用int转入和转出                 intlist2.Add(index);             }             stw.Stop();             Console.WriteLine("int:{0}", stw.Elapsed.Ticks);                      }     }

 

 

测试结果:

C#中var、int、object性能比较

 

分析:

通过查阅文档和书籍,var是隐式类型的局部变量 主要是方便书写。在编译期间,早已把var替换为实际推断的类型(这里是int),而object多了一个装箱拆箱的操作,

耗时自然是最长的。

以下是笔者对程序进行反编译(C# 和 IL)后的截图,我们可以清晰滴看到多余的代码已经被优化,而所谓的var也不见了。在IL源码中,明显的看到object在循环的时候有装箱拆箱的操作。

 

反编译的C#代码:(已经被优化)

C#中var、int、object性能比较

object测试的IL:

 

C#中var、int、object性能比较

 

var测试的IL:

C#中var、int、object性能比较

 

int测试的IL:

 

C#中var、int、object性能比较

 

 

总结:

 var性能 ≈ int > object

   object 类型牵涉装箱拆箱的问题,自然是效率最慢的。

    但从测试结果来看,var类型的性能与int不相上下,但在测试结果中可以看到大部分var耗时会超过int。 实际上var在编译的时候已经确定类型了


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI