Основная проблема с вашим вопросом заключается в предположении, что один
Измерение может ответить на все ваши вопросы. Вам нужно измерить
несколько раз, чтобы получить эффективную картину ситуации и
особенно в языке сборки мусора типа C #.
Другой ответ дает хороший способ измерения базовой производительности.
static void Profile(string description, int iterations, Action func) {
// warm up
func();
var watch = new Stopwatch();
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds);
}
Однако, это единственное измерение не учитывает мусор
коллекция. Правильный профиль дополнительно учитывает наихудшую производительность
сбора мусора распределены по многим вызовам (этот номер
бесполезно, так как виртуальная машина может завершиться, даже не собирая оставшиеся
мусор, но все еще полезно для сравнения двух разных
реализации func
.)
static void ProfileGarbageMany(string description, int iterations, Action func) {
// warm up
func();
var watch = new Stopwatch();
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds);
}
И можно также измерить наихудшую производительность
сборка мусора для метода, который вызывается только один раз.
static void ProfileGarbage(string description, int iterations, Action func) {
// warm up
func();
var watch = new Stopwatch();
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.Elapsed.TotalMilliseconds);
}
Но важнее, чем рекомендовать какие-либо конкретные возможные дополнительные
Измерения в профиль является идея, что нужно измерить несколько
другая статистика, а не только один вид статистики.