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

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

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

实践出真知:

新建一个控制台应用程序

/*Var 性能测试 */
           Stopwatch stw = new Stopwatch();
 
           List<int> intlist = new List<int>();
           stw.Start();
           for( int i = 0; i < 10000000; i++ ) {
               var index = i;//使用var转入和转出
               intlist.Add(index);
           }
           stw.Stop();
           Console.WriteLine("Var:{0}", stw.Elapsed.Ticks);
 
 
           /*Int 性能测试 */
 
 
           List<int> intlist2 = new List<int>();
           stw.Start();//开始时间
           for( int i = 0; i < 1000000; i++ ) {
               int index = i;//使用int转入和转出
               intlist2.Add(index);
           }
           stw.Stop();
           Console.WriteLine("int:{0}", stw.Elapsed.Ticks);
 
           /*Object性能测试 */
           stw.Start();//开始时间
 
           List<int> intlist3 = new List<int>();
           for( int i = 0; i < 1000000; i++ ) {
               object index = i;//使用object转入和转出
               intlist3.Add((int)index);
           }
           stw.Stop();
           Console.WriteLine("obj:{0}", stw.Elapsed.Ticks);
 
           Console.Read();

测试结果:

总结:

 var性能 > int > object

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

但从测试结果来看,var类型的性能总是优于int或其他类型。

时间: 2025-01-01 12:03:16

C#中var、int、object性能比较的相关文章

C#中var类型

VAR 是3.5新出的一个定义变量的类型其实也就是弱化类型的定义VAR可代替任何类型可以赋予局部变量推断"类型"var 而不是显式类型.var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型.推断类型可以是内置类型.匿名类型.用户定义类型..NET Framework 类库中定义的类型或任何表达式.简单来说,就是编译器会根据上下文来判断你到底是想用什么类型的 至于什么情况下用到VAR   我想就是你无法确定自己将用的是什么类型就可以使用VAR     类似 OBJECT但是效

C#中var关键字【转】

[转]http://blog.csdn.net/courageously/article/details/5695626 var关键字是C# 3.0开始新增的特性,称为推断类型 . 可以赋予局部变量推断“类型”var 而不是显式类型.var 关键字指示编译器根据初始化语句右侧的表达式推断变量的类型.推断类型可以是内置类型.匿名类型.用户定义类型..NET Framework 类库中定义的类型或任何表达式. 上面的资料有点抽象不好理解. 示例: 原来我们定义变量,是要这样: 数据类型 变量名 =

[C#.NET] C#中使用反射的性能分析

最近在研究一个可配置系统的框架,在代码中大量使用了反射的方法,虽然借鉴到其他的语言,如java中反射性能都比较差,但是想到c#既然是一种强类型的语言,对于AppDomain中的类的调用应该性能不会差很多.   今天在mvp站点上看到有人说反射的性能很差,要避免使用,就写了一个简单的例子测试了一下   测试类如下:   namespace ReflectionTest.Test   {    public class CTester    {    public CTester()    {   

JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508) 基本数据类型:String,boolean,Number,Undefined, Null 引用数据类型: Object(Array,Date,RegExp,Function) 疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null.undefin

Java 中的 int 与 Integer 用于 List&lt;Integer&gt; 时,以及通过打印变量检测程序运行和函数调用次数计数

总结一下最近做的东西中遇到的问题 1. Java 中的 int 与 Integer 用于 List<Integer>  时 两者之间的关系都是很清楚的,int 是基本数据类型,存储的是值,而 Integer 是引用数据类型,存储的是指向数值的地址. Integer 是在类层面上对 int 的封装.然后 Java 提供了自动装包拆包机制,使得两者之间可以转换.这里主要是测试了下它们用于 List 时候的疑惑. /* * To change this template, choose Tools

【性能分析】初探VS2010中的Profile(性能剖析)功能

VS2010中的Profile(性能剖析)功能十分实用,它可以协助程序员迅速锁定当前程序的性能瓶颈,为程序的优化做准备. 点击VS2010的Analyze菜单,选择Launch Performance Wizard,依照提示可以很方便地完成Profile的必需配置.可能你会碰到"Injection of runtime library failed"错误,这时就不要使用Wizard,而要选择Analyze下拉菜单中的Profiler->Attach/Detach...,将Prof

js 中var that=this

js中经常出现var that=this,为什么这么做? http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean-in-javascript 问题,回答: 一个回答:$('#element').click(function(){ // this is a reference to the element clicked on var that = this; $('.elements').each(funct

【转载】新知识点:JAVA List.add(int,object)

转载地址:http://blog.sina.com.cn/s/blog_6819fa800100lwr6.html 1.函数原型 void add(int index, E element) 在列表的指定位置插入指定元素(可选操作).将当前处于该位置的元素(如果有的话)和所有后续元素向右移动(在其索引中加 1). 2.参数: index - 要在其中插入指定元素处的索引 element - 要插入的元素   3.抛出: UnsupportedOperationException - 如果列表不支

JavaScript中var a=b=c=d的小发现

看了别人的博客随手记录下 先看一下以下的代码 1 var a=1,b=2,c=3; 2 3 (function(){ 4 var a=b=1; 5 })(); 6 7 console.log(a); 8 console.log(b); 这是大家众所周知的闭包了,没错,闭包的一个很重要的用途就是变量不能在外部访问,不会污染外部变量,所以大家是不是会认为7,8行的结果分别是1 2 呢?其不然,7,8行的正确结果是1,1. 为什么会这样呢?我一开始也是认为结果是结果是1 2,其实JS是这样执行的,在闭