在 C# 编程中,对数组进行访问是一项常见的操作。然而,对于性能优化来说,理解线性数组访问和随机访问之间的差异是至关重要的。#### 线性数组访问在线性数组访问中,元素按顺序存储在内存中,这意味着它们在内存中是连续的。由于这种连续性,线性数组支持快速顺序访问,因为 CPU 可以按照连续的内存地址顺序预取下一个元素。这种顺序访问的特性使得线性数组在遍历元素时表现良好,尤其是在大型数据集上。
csharpusing System;class Program{ static void Main() { int[] linearArray = new int[1000000]; // 初始化数组 for (int i = 0; i < linearArray.Length; i++) { linearArray[i] = i; } // 访问数组元素 long sum = 0; foreach (var element in linearArray) { sum += element; } Console.WriteLine("线性数组访问结果:" + sum); }}
#### 随机访问与线性数组不同,随机访问涉及在数组中跳转到不连续的内存位置以访问元素。这种不连续的访问方式可能会导致性能下降,因为 CPU 难以预测下一个要访问的内存位置,从而无法有效地进行预取。在大型数据集上,频繁的随机访问可能会导致缓存未命中,增加内存访问延迟,影响程序性能。
csharpusing System;class Program{ static void Main() { int[] randomAccessArray = new int[1000000]; // 初始化数组 for (int i = 0; i < randomAccessArray.Length; i++) { randomAccessArray[i] = i; } // 随机访问数组元素 long sum = 0; Random random = new Random(); for (int i = 0; i < 10000; i++) { int index = random.Next(0, randomAccessArray.Length); sum += randomAccessArray[index]; } Console.WriteLine("随机访问数组结果:" + sum); }}