一、测试方法
分别对几种方法进行一亿次的循环,每次循环调用一次相应的方法。为了防止其他的误差,都使用空方法体。同时利用Stopwatch类计时。
三种方法如下:
//传统方法
static void N1(int a) { }
//泛型方法
static void N2<T>(T a) { }
//使用object传值方法
static void N3(object a) { }
二、测试主代码
public static void Main()
{
int a = 100;
int t = 100000000;//每次循环1亿次
Stopwatch sw = new Stopwatch();
sw.Start();
for(int i = 0; i < t; i++) { N1(a); }
sw.Stop();
Console.WriteLine("传统传值花费时间:{0}ms",sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < t; i++) { N3(a); }
sw.Stop();
Console.WriteLine("采用object花费的时间:{0}ms", sw.ElapsedMilliseconds);
sw.Restart();
for(int i = 0; i < t; i++) { N2<int>(a); }
sw.Stop();
Console.WriteLine("采用泛型花费的时间:{0}ms", sw.ElapsedMilliseconds);
}
三、结果
传统传值花费时间:275ms
采用object花费的时间:688ms
采用泛型花费的时间:289ms
四、分析
利用object进行传值时,经历了装箱与拆箱的操作,性能直接下降了一倍还多。