最近看到一个比较object,泛型,普通类型效率的课程,自己也有一些收获,现在把自己的想法写出来和大家分享一下。
在main方法中直接调用这个静态方法就行。
不要忘记使用 System.Diagnostics 命名空间
public class Compare
{
/// <summary>
/// 性能比较测试
/// </summary>
public static void Show()
{
Console.WriteLine("**************Compare************");
{
int iValue = 12345;
long commomSecond = 0;//普通方法初始
long objectSecond = 0;//object 初始
long genericSecond = 0;//泛型初始
long commonSecondt = 0;
long objectSecondt = 0;
long genericSecondt = 0;
/*泛型时间测量*/
{
Stopwatch watch = new Stopwatch();//new一个钟表
watch.Start();//开始计时
for (int i = 0; i < 100000000; i++) //循环1亿次调用
{
Show<int>(iValue);//泛型调用
}
watch.Stop(); //停止计时
genericSecond = watch.ElapsedMilliseconds;//Millisecond 以毫秒记
genericSecondt = watch.ElapsedTicks;//一种时间刻度,和硬件以及操作系统有关
}
/* 普通时间测量*/
{
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000000; i++)
{
ShowInt(iValue);
}
watch.Stop();
commomSecond = watch.ElapsedMilliseconds;
commonSecondt = watch.ElapsedTicks;
}
/*object时间测量*/
{
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000000; i++)
{
ShowObject(iValue);
}
watch.Stop();
objectSecond = watch.ElapsedMilliseconds;
objectSecondt = watch.ElapsedMilliseconds;
}
Console.WriteLine("commonSecond={0}\t objetSecond={1}\t genericSecond={2}\t",
commomSecond, objectSecond, genericSecond);
Console.WriteLine("commonSecondt={0}\t objetSecondt={1}\t genericSecondt={2}\t",
commonSecondt, objectSecondt, genericSecondt);
}
}
private static void ShowInt(int iParameter)
{
//do nothing
}
private static void ShowObject(object oParameter)
{
//do nothing
}
private static void Show<T>(T tParameter)
{
//do nothing
}
}
运行结果如下
结合所学知识,证明了object效率较低下,原因可能是与拆箱与装箱有关。
而泛型与普通方法相差不大,验证了泛型的效率较高。
通过此次试验,也可以学会一种简便计时器的使用。