Я написал несколько часто используемых методов, в которых я нашел, что производительность очень важна. Сделав несколько изменений, чтобы исправить заметные ошибки производительности, я хотел бы провести несколько тестов, чтобы убедиться, что производительность не ухудшилась из-за будущих изменений. Тем не менее, я нахожу, что эти тесты часто очень шелушатся (вероятно, из-за сбора мусора, другой активности на нашем автоматизированном сервере тестирования и т. Д.). Мне интересно, есть ли принятая передовая практика для написания и поддержания подобных тестов?Что представляет собой хороший способ создания тестов нечеткой производительности
До сих пор большинство моих тестов выглядеть следующим образом:
runMyCode(); // for assembly loading/jitting
var sw = Stopwatch.StartNew();
for (iterations) { runMyCode(); }
var time = sw.Elapsed;
// then either
Assert.Less(time, TimeSpan.FromSeconds(some reasonably generous amount of time));
// or
// time some other piece of benchmark code (e. g. a framework method
// which runMyCode() layers on top of). And do:
Assert.Less(time.TotalSeconds, someMultiplier * benchmarkTime.TotalSeconds);
Одна мысль, я должен был улучшить стабильность будет иметь тестовый магазин записанный раз в базе данных, и только потерпеть неудачу, если последние N раз не удалось провести тест.
Взгляните на [это] (http://tech.pro/blog/1293/c-performance-benchmark-mistakes-part-one). –