Моя цель - сравнить производительность множества C# реализаций одного и того же. В конце концов, я хочу подобрать наиболее быструю реализацию. Я использую StopWatch
для измерения времени каждого прогона, а также я использую достаточно большой вход, чтобы позволить реализации работать дольше и находить существенные различия во времени между прогонами и быть уверенным, что они не выходят за пределы ошибка.
Проблема в том, что я нахожу очень большие колебания, даже когда выполняется точно такой же код. Иногда, если я переупорядочу тестовые примеры, это повлияет на результат определения 1009 * тестового примера с увеличением времени на 50%, что выходит за пределы погрешности и полностью меняет вывод о том, какая реализация быстрее. Это со следующим кодом, выполняемым перед самим тестовым набором и перед измерением времени:
Thread.Sleep(500);
GC.Collect(2, GCCollectionMode.Forced, true, true);
GC.Collect(2, GCCollectionMode.Forced, true, true);
Thread.Sleep(500);
Я понимаю, что не могу полностью исключить G C, но все еще колебания во времени 50% слишком много Что вы можете предложить, кроме того, чтобы исключить как можно больше переменных, чтобы найти гораздо более согласованные и точные измерения времени выполнения кода?