Я просто пытаюсь выяснить, почему функции, похоже, работают быстрее после того, как они были вызваны один раз, прежде чем измерять время.C# Функция быстрее измеряет время после предварительного вызова?
Вот пример моего кода измерения:
float X = 0;
FastMath.FireUp(); // Does nothing in this sample
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 5; i++)
{
X = FastMath.FastSin(i);
}
watch.Stop();
Console.WriteLine("TIME : " + watch.Elapsed);
И здесь вы можете увидеть мою называемую функцию:
public static float FastSin(float val)
{
int index = 360 - ((int)val % 360);
if(index == 360)
{
return 0;
}
return -TRIGONOMETRIC_LOOKUPTABLE[index];
}
Так дело в том, что мои измерения показывает следующий вывод:
ВРЕМЯ: 00: 00: 00.0001196
Позволяет заполнить функцию "FireUp" с:
float x = FastSin(123);
Теперь измеренное время значительно уменьшилось:
00: 00: 00,0000015
Но все-таки, "FastCos", который не был вызван функцией FireUp, все еще занимает больше времени.
Две другие точки, которые я должен упомянуть:
- Если я не вызовите функцию "FireUp", увеличивается время снова:
ВРЕМЯ: 00: 00: 00,0002796
Если я воспользуюсь функцией «FireUp»:
float x = FastSin (123); x = FastCos (123);
Он просто отлично работает для обеих функций в будущем измерении. Теперь для каждой функции требуется ВРЕМЯ: 00: 00: 00.0000019.
Почему это происходит?
JIT Compilation https://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90).aspx, http://www.telerik.com/blogs/understanding-net-just- in-time-compilation – Eser