c#编程最佳实践:合适的集合, 选择Dic字典、List列表还是Array数组
对于许多类型,我们宁愿不决定在日常编程生活中使用什么数据类型。就在几个月前,我也是其中之一。但是当我开始学习编程中的最佳实践以提高代码性能时,我了解到了错误的数据类型是如何影响代码的。我将展示一个演示来证明这个概念。
static void Main(string[] args) { List<Int32> li = new List<int>(); Stopwatch sw =new Stopwatch(); sw.Start(); for (int i = 0; i < 10000; i++) { li.Add(i); } sw.Stop(); Console.Write("Using Arraylist(Object)" + sw.ElapsedTicks + "\n"); sw.Reset(); sw.Start(); Int32[] a = new Int32[10000]; for (int i = 0; i < 10000; i++) { a[i] = i; } sw.Stop(); Console.Write("Using Value(Integer Array)" + sw.ElapsedTicks); Console.ReadLine(); }
在上面的代码中,首先我使用了一个list来存储1000个整数值,在第二次执行相同的操作时,我使用了一个整数数组。我的输出截图显示了哪种存储机制最适合整数数组。现在,你可能会想为什么这个list要花更多的时间呢?原因是,list以对象格式存储数据,当我们首先尝试存储值类型时,它将其转换为引用类型,然后再存储。因此,第一点是始终选择适当的存储机制以获得最佳性能。
根据你的目的选择最好的集合
我们.net开发人员非常熟悉c#中的集合以及它们用来存储值的方法。让我们看看它们是如何执行搜索的。查看搜索整数的性能。这是我的代码。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using System.Net; using System.Net.NetworkInformation; namespace Test1 { class Program { static void Main(string[] args) { List<Int32> li = new List<Int32>(1000); Dictionary<int, int> di = new Dictionary<int, int>(1000); int[] arr = new int[1000]; int a; for (int i = 0; i < 1000; i++) { li.Add(i); di.Add(i, i); arr[i] = i; } Stopwatch sw = new Stopwatch(); sw.Start(); a = li[500]; sw.Stop(); Console.WriteLine("From list:- " + sw.ElapsedTicks); sw.Start(); a = arr[500]; sw.Stop(); Console.WriteLine("From Integer array:- " + sw.ElapsedTicks); sw.Restart(); a = di[500]; sw.Stop(); Console.WriteLine("From Dictionary:- " + sw.ElapsedTicks); Console.ReadLine(); } } }
输出在这里:
我们可以清楚地看到,在字典的情况下,搜索的性能是最差的,而在list和整数数组的情况下,性能非常相似。
—