C#泛型与非泛型性能比较的实例
在C#中,泛型和非泛型的性能都很重要,选择合适的类型会影响程序的性能。本文将通过实际的代码示例来对比泛型和非泛型在执行时间和内存消耗方面的差异。
示例1:列表
需要在程序中实现一个可以动态添加元素的列表。我们可以用List<T>
实现泛型列表,也可以自己实现一个非泛型版本的列表。
泛型列表的实现
List<int> list = new List<int>();
for (int i = 0; i < 10000000; i++)
{
list.Add(i);
}
非泛型列表的实现
ArrayList list = new ArrayList();
for (int i = 0; i < 10000000; i++)
{
list.Add(i);
}
我们可以通过Stopwatch
类来计算两种实现方式的执行时间。
Stopwatch sw = new Stopwatch();
sw.Start();
List<int> list = new List<int>();
for (int i = 0; i < 10000000; i++)
{
list.Add(i);
}
sw.Stop();
Console.WriteLine("Generic List time : " + sw.Elapsed.TotalMilliseconds + "ms");
sw.Reset();
sw.Start();
ArrayList nonGenericList = new ArrayList();
for (int i = 0; i < 10000000; i++)
{
nonGenericList.Add(i);
}
sw.Stop();
Console.WriteLine("Non-Generic List time : " + sw.Elapsed.TotalMilliseconds + "ms");
输出结果:
Generic List time : 342,9279ms
Non-Generic List time : 407,862ms
泛型列表的实现方式比非泛型列表的实现方式要快,而且性能差异非常明显。
示例2:字典
我们需要在程序中实现一个可以保存键值对的数据结构。我们可以用Dictionary<TKey, TValue>
类实现泛型字典,也可以自己实现一个非泛型版本的字典。
泛型字典的实现
Dictionary<int, string> dict = new Dictionary<int, string>();
for (int i = 0; i < 1000000; i++)
{
dict.Add(i, i.ToString());
}
非泛型字典的实现
Hashtable dict = new Hashtable();
for (int i = 0; i < 1000000; i++)
{
dict.Add(i, i.ToString());
}
同样地,我们可以用Stopwatch
类来计算两种实现方式的执行时间。
Stopwatch sw = new Stopwatch();
sw.Start();
Dictionary<int, string> dict = new Dictionary<int, string>();
for (int i = 0; i < 1000000; i++)
{
dict.Add(i, i.ToString());
}
sw.Stop();
Console.WriteLine("Generic Dictionary time : " + sw.Elapsed.TotalMilliseconds + "ms");
sw.Reset();
sw.Start();
Hashtable nonGenericDict = new Hashtable();
for (int i = 0; i < 1000000; i++)
{
nonGenericDict.Add(i, i.ToString());
}
sw.Stop();
Console.WriteLine("Non-Generic Dictionary time : " + sw.Elapsed.TotalMilliseconds + "ms");
输出结果:
Generic Dictionary time : 59,5525ms
Non-Generic Dictionary time : 107,5804ms
泛型字典的实现方式也比非泛型字典的实现方式快得多。
总结
从上述两个例子中可以看出,使用泛型的性能要比使用非泛型的性能好很多。因此,在实现类似列表、字典等数据结构时,我们应该优先考虑使用泛型。当然,在某些情况下,使用非泛型的实现方式可能更符合实际需要,所以需要具体情况具体分析。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#泛型与非泛型性能比较的实例 - Python技术站