У нас есть довольно интересный эффект в небольшом тестовом приложении, которое мы не можем объяснить.
У нас есть блок кода:
while (true)
{
for (int i = 0; i < 1920; i++)
{
for (int j = 0; j < 1080; j++)
{
//l += rand.Next(j);
l += matcher.Next(j);
}
}
k++;
Console.WriteLine("{0}: Iteration {1}, l: {2}", DateTime.Now.ToString("hh:mm:ss"), k, l);
l = 0;
handle.WaitOne(100);
}
И класс Matcher делает только одну вещьего Next(j)
вызов.Он возвращает метод Next(j)
своего внутреннего объекта Random (поэтому мы добавляем простой вызов функции).
Вот определение класса Matcher:
class Matcher
{
private Random rand = new Random();
internal int Next(int j)
{
return rand.Next(j);
}
}
Когда мы выполняем этот кодОдна итерация занимает около 6 секунд на Intel Core 2 Quad.Однако, если мы прокомментируем строку l += matcher.Next(j);
и раскомментируем строку l += rand.Next(j);
, единственная итерация начнет занимать вторую секунду.
У кого-нибудь есть идеи, почему это происходит?