C#泛型与非泛型性能比较 类型安全的实例代码

发布时间:2019-08-15编辑:脚本学堂
本文详细介绍下,C#中泛型与非泛型在性能方面的比较,以及c#泛型类型安全的代码,帮助大家深入学习C#泛型相关内容。有需要的朋友,参考下吧。

该转换是隐式进行的,如上面的例子所述。还可以手工进行转换:
 

int i = 1;
object o = i;
 

而拆箱是显示的,
 

int i = 20;
bject o = i;
int j = (int)o;  

在c#2.0之前的版本中,考虑如下问题,ArrayList集合的Add方法接受的是bject类型,如果此时进入的是值类型,那么就会进行装箱操作,如果从集合中取出数据,则还会进行相应的拆箱操作,现在观察,如果在一个大的循环结构中,进行这种操作,毋庸置疑的,会对性能造成影响,因为拆装箱本身就是要损失性能的。下面就分别使用泛型和不使用的情况进行代码分析。事例很简单,真实地业务环境会比这个复杂很多,再次仅仅表现出性能即可。
例子中声明一个arraylist集合,首先是将1千万个数字添加到集合中,然后再取出来,分别进行了装箱和拆箱操作。
 

复制代码 代码示例:
DateTime tbegin = DateTime.Now;
ArrayList list = new ArrayList();
 for (int i = 1; i <= 10000000; i++)
   ...{
   //System.Threading.Thread.Sleep(1);
   list.Add(i);
}
for (int j = 0; j < list.Count; j++)
...{
      int s = (int)list[j];
 }
 DateTime tend = DateTime.Now;
 TimeSpan ts = tbegin - tend;
 Console.WriteLine(ts.ToString());

经过多次运行,取平均值,大约为3.9秒,下面的代码适用泛型技术,应用了System.Collections.Generic命名空间下的泛型集合List<>,代码如下:
 

复制代码 代码示例:

DateTime tbegin = DateTime.Now;
 List<int> list = new List<int>();
 // ArrayList list = new ArrayList();
 for (int i = 1; i <= 10000000; i++)
 ...{
     //System.Threading.Thread.Sleep(1);


     list.Add(i);
 }
 for (int j = 0; j < list.Count; j++)
 ...{
     int s = (int)list[j];
 }
 DateTime tend = DateTime.Now;
 TimeSpan ts = tbegin - tend;
 Console.WriteLine(ts.ToString());
 

经过多次运行得到一个平均值约为0.583,

可以轻松看出,应用泛型和没有应用泛型时间差了近6.7倍。

有了以上的介绍,关于C#中泛型与非泛型的知识,你应该已经明了很多了。
脚本学堂,祝大家学习进步。

您可能感兴趣的文章:
C# 泛型集合List与非泛型集合ArrayList之性能比较
C# 泛型类与泛型函数的实例学习
C#泛型学习笔记
ASP.NET2.0泛型和匿名方法介绍