MST
星途 面试题库

面试题:C#循环结构中的性能优化

在C#中,当处理大量数据时,循环结构的性能优化至关重要。假设你需要遍历一个包含100万个整数的列表,对其中能被3整除的数进行累加操作。请从循环结构的选择、变量作用域、缓存优化等方面,阐述如何编写高性能的代码,并给出具体的实现代码。
12.2万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试
  1. 循环结构选择
    • for循环在已知循环次数的场景下通常性能较好,因为它的初始化、条件判断和迭代部分都很明确,编译器可以更好地进行优化。这里我们明确知道要遍历100万个元素,所以for循环是一个不错的选择。foreach循环在遍历集合时会创建一个枚举器,在处理大量数据时会有额外开销,相比之下for循环更优。
  2. 变量作用域
    • 累加变量应该在循环外部声明,这样避免在每次循环时重复创建和销毁变量,减少额外开销。
  3. 缓存优化
    • 由于列表中的元素是固定的,在循环中每次获取列表元素时,编译器可能会进行边界检查等操作。可以提前获取列表的长度并缓存起来,避免在每次循环时都去获取列表的Count属性,因为获取属性值可能会有一些额外的开销。

以下是具体实现代码:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int>();
        for (int i = 0; i < 1000000; i++)
        {
            numbers.Add(i);
        }

        int sum = 0;
        int count = numbers.Count;
        for (int i = 0; i < count; i++)
        {
            if (numbers[i] % 3 == 0)
            {
                sum += numbers[i];
            }
        }

        Console.WriteLine($"Sum of numbers divisible by 3: {sum}");
    }
}