Почему LINQ быстрее в этом примере

Я написал следующее, чтобы проверить производительность использованияforeach против:LINQ

private class Widget
{
    public string Name { get; set; }
}

static void Main(string[] args)
{
    List widgets = new List();
    int found = 0;

    for (int i = 0; i  a.Name.StartsWith("4")).Count();

    Console.WriteLine(found + " - " + DateTime.Now.Subtract(starttime).Milliseconds + " ms");

    Console.ReadLine();
}

Я получаю что-то вроде следующего вывода:

31160 - 116ms
31160 - 95 ms

В каждом запуске LINQ превосходит foreach примерно на 20%. Насколько я понимаю, методы расширения LINQ использовали стандартный c # под прикрытием.

Так почему же LINQ быстрее в этом случае?

РЕДАКТИРОВАТЬ:

Поэтому я изменил свой код, чтобы использовать секундомер вместо даты и времени, и все равно получал те же результаты. Если я сначала запускаю запрос LINQ, то мои результаты показывают, что LINQ будет примерно на 20% медленнее, чем foreach. Это должно быть своего рода проблемой разогрева JIT. Мой вопрос: как мне компенсировать разогрев JIT в моем тестовом случае?

Ответы на вопрос(2)

Ваш ответ на вопрос