Почему секундомер тикает дольше, когда он бежит в первый раз

Я управляю этим кодом внутри некоторое время петля в течение подобных 10000 раз, я заметил, что timeSpent - приблизительно 4 за исключением первого раза, который является ~500, почему?

Stopwatch s;
long price;
count = 10000;
while (count!=0)
{
   s = Stopwatch.StartNew();

   price = classA.Method(..some inputs...);  //this method do some iterations to return back a long given some inputs

   s.Stop();
   timeSpent = s.ElapsedTicks/(Stopwatch.Frequency/(1000L * 1000L));
   s.Reset();
   /*write the price, timeSpent and inputs into a .txt file*/
   count--;
}
0
nl ja de
Shouldn' t вы начинают секундомер снаружи петля?
добавлено автор abatishchev, источник
Даже если это инициализирует что-то, это инициализирует снова, когда это назовут снова isn' t это?
добавлено автор user1701840, источник
Я хотел бы посчитать среднее число времени, используемого для вызовов функции
добавлено автор user1701840, источник
Пожалуйста, посмотрите мои обновления
добавлено автор user1701840, источник
Извините, я думаю, что это должно быть ясно теперь. В основном я хочу видеть, сколько времени делает ClassA.Method (), берет, чтобы возвратиться для различных исходных данных
добавлено автор user1701840, источник
Но я хотел бы иметь микросекунды.
добавлено автор user1701840, источник
Намного легче использовать Секундомер. ElapsedMilliseconds, чем выполнение математики самостоятельно с Клещами
добавлено автор Jonathon Reinhart, источник
Каковы/* Вызовы функции */? Один из них мог бы инициализировать что-то.
добавлено автор Steve Wellens, источник
Какова была цель того обновления? Мы все еще don' t знают то, что делает тот метод.
добавлено автор Michael Petrotta, источник
Необходимо попытаться изолировать его добавлением, говорит международный прилавок и только вызывает функции если> 1.
добавлено автор PeterJ, источник
Я подозреваю вызовы функции you' опущенные ve поражаются впервые и you' ре видя стоимость использования языка МОНЕТЫ В ПЯТЬ ЦЕНТОВ.
добавлено автор Paul Phillips, источник

1 ответы

В первый раз, когда метод называют, он собран от IL до собственного кода. Любые последующие требования снова используют произведенный собственный код. Так, в целом вы ожидали бы в первый раз, когда вы называете метод, чтобы взять самое длинное.

Трудно доказать, что это - причина, к сожалению, но что мог бы , объясняет это. Я видел, что это то же самое много раз происходит, определяя эффективность/профилирование: первое требование берет самое длинное. Я обычно работал вокруг этого, просто отказавшись от первого показа.

Конечно, метод, который вы называете, мог иметь побочные эффекты, приобрести ресурсы и припрятать про запас их, или просто что-либо, что только происходит однажды и только на первом требовании. Это просто некоторые причины, я говорю, что трудно быть уверенным.

2
добавлено
Или у одного из классов есть статический конструктор.
добавлено автор ta.speot.is, источник
Didn' t даже думают об этом, но it' s очень положительная сторона.
добавлено автор Paul Phillips, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot