标签:分配 else 避免 速度 优秀的程序员 gen compare where 带来
1.泛型与其他类型作对比:
我们现在要求实现一个类
(1)一般声明类
public class Stack
{
private int[] m_item;
public int Pop() { return 0}
public void Push(int itme) { }
public Stack(int i)
{
this.m_item = new int[i];
}
}
以上代码缺点是只能处理一种数据类型(int),换个string类型就不行了。
(2)优秀的程序员想到用一个通用数据类型object来实现这个类
public class Stack
{
private object[] m_item;
public object Pop() { return 0}
public void Push(object itme) { }
public Stack(object i)
{
this.m_item = new object[i];
}
}
这个类写的不错,非常灵活,但是在处理数据时,若数据量大,则会出现不断地装箱和拆箱操作,这将在托管堆上分配和回收大量的变量,则性能损失非常严重。
(3)使用泛型
public class Stack<T>
{
private T[] m_item;
public T Pop() { return 0}
public void Push(T itme) { }
public Stack(T i)
{
this.m_item = new T[i];
}
}
此类就解决了装箱和拆箱频繁带来的性能损失问题。
2.方法对比
以下为int和string类型的比较方法
public class CompareClass
{
//整数比较
public static int CompareInt(int value1, int value2)
{
if (value1.CompareTo(value2) > 0)
return value1;
else
return value2;
}
//字符串比较
public static string CompareInt(string value1, string value2)
{
if (value1.CompareTo(value2) > 0)
return value1;
else
return value2;
}
}
以上代码对于不同类型要不同处理,此时可以写为泛型:
public class CompareClass<T> where T : IComparable
{
public static T CompareValue(T value1, T value2)
{
if (value1.CompareTo(value2) > 0)
return value1;
else
return value2;
}
}
3.时间消耗对比
(1)不用泛型代码
public static void TestGeneric()
{
Stopwatch stopwatch = new Stopwatch();
//ArrayList不是泛型
ArrayList array = new ArrayList();
stopwatch.Start();
for (int i = 0; i < 10000000; i++)
{
array.Add(i);
}
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed);
}
(2)用泛型代码
public static void TestGeneric()
{
Stopwatch stopwatch = new Stopwatch();
//List<int>为泛型
List<int> gelist = new List<int>();
stopwatch.Start();
for (int i = 0; i < 10000000; i++)
{
gelist.Add(i);
}
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed);
}
(1)耗时2秒多,(2)耗时几百毫秒
4.使用泛型的好处:
(1)泛型能够实现代码复用
(2)泛型能够减少装箱拆箱操作,避免性能损失
(3)减少处理器的负担,加快运行速度
标签:分配 else 避免 速度 优秀的程序员 gen compare where 带来
原文地址:https://www.cnblogs.com/zwj-199306231519/p/11627196.html