У меня проблема с измерением времени, которая действительно беспокоит меня. Я выполняю что-то вроде следующего кода (в C #):
Stopwatch sw = Stopwatch.StartNew();
Foo(args);
sw.Stop();
//log time
public void Foo(var args)
{
Stopwatch sw = Stopwatch.StartNew();
//do stuff
sw.Stop();
//log time
}
И результат большой разницы между обоими разами, мой код дает мне: 15535 мс изнутри функции и 15668 мс снаружи ... 133 мс кажется мне очень много для вызова функции (даже с 10 параметры, которые я даю своим), или для указания точности секундомера (которая должна быть сверхточной).
Как бы вы объяснили эту разницу во времени?
note 1 : То же самое происходит при нескольких последовательных вызовах: я получаю разницу в 133, 81, 72, 75, 75 миллисекунд для 5 вызовов
примечание 2 : фактические параметры моей функции:
- 6 объектов класса
- один массив структуры (массив передается как ссылка, верно?)
- 2 ref int
- 1 байт []
- 1 класс
- 1 структура небольшого размера (<25 байт) </li>
Обновление :
В Release различие для первого вызова еще больше (является ли JIT-компиляция более дорогой в релизе, что могло бы объяснить это?), И следующие шаги имеют те же издержки (~ 75 мс)
Я попытался инициализировать секундомеры снаружи, передать один как параметр и войти за пределы функции, разница все еще там.
Я также забыл, что я даю некоторые свойства в качестве параметров, которые должны создаваться в первый раз, поэтому разница в 50 мс для первого вызова может быть объяснена инициализацией свойств и компиляцией JIT.