Даже если вы исправите код, чтобы вычислить одну и ту же вещь в обоих случаях, не проверяйте подобные вещи за один прогон. Вы не получите должного результата, если сам тест не займет хотя бы секунду. Запустите его миллион раз, а затем разделите общее время. Когда вы тестируете что-то, что займет всего одну или две миллисекунды, вы должны убедиться, что тест занимает достаточно много времени, чтобы игнорировать разницу между холодным кэшем, временем вызовов .Start () и .Stop (), небольшой задержкой GC в время и т. д. Также убедитесь, что фактическая работа занимает больше времени, чем пустой цикл подсчета (то есть for(many times) recurse(x)
имеет достаточно высокий x
, что само по себе for
не имеет значения)
Ваш результат 0,5 мс за один прогон здесь более или менее бессмыслен. Кроме того, если это язык с параллельными ссылками, я бы рекомендовал вызывать ту же функцию перед тестированием, чтобы убедиться, что она уже скомпилирована - в противном случае это приведет к дополнительным издержкам.
TL; DR - накладные расходы на другие вещи, происходящие вокруг вашей функции, превышают время, затрачиваемое на выполнение вашей функции.