by Anonymous » 05 Apr 2025, 23:46
ziemlich oft auf, so dass ich kleine Codebrocken benchmarkieren kann, um zu sehen, welche Implementation am schnellsten ist. < /p>
Ziemlich oft sehe ich Kommentare, dass das Benchmarking -Code Jitting oder den Müllsammler nicht berücksichtigt. < /p>
Ich habe die folgende einfache Benchmarking -Funktion, die ich langsam entwickelt habe: < /p>
static void Profile(string description, int iterations, Action func) {
// warm up
func();
// clean up
GC.Collect();
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
< /code>
Verwendung: < /p>
Profile("a descriptions", how_many_iterations_to_run, () =>
{
// ... code being profiled
});
< /code>
Hat diese Implementierung Fehler? Ist es gut genug zu zeigen, dass Implementaion X schneller als die Implementierung y über Z -Iterationen ist? Kannst du dir vorstellen, wie du das verbessern würdest? < /p>
Bearbeiten < /strong>
Es ist ziemlich klar, dass ein zeitbasierter Ansatz (im Gegensatz zu Iterationen) bevorzugt wird, hat jemand Implementierungen, bei denen die Zeitprüfungen die Leistung nicht beeinflussen?
ziemlich oft auf, so dass ich kleine Codebrocken benchmarkieren kann, um zu sehen, welche Implementation am schnellsten ist. < /p>
Ziemlich oft sehe ich Kommentare, dass das Benchmarking -Code Jitting oder den Müllsammler nicht berücksichtigt. < /p>
Ich habe die folgende einfache Benchmarking -Funktion, die ich langsam entwickelt habe: < /p>
static void Profile(string description, int iterations, Action func) {
// warm up
func();
// clean up
GC.Collect();
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
< /code>
Verwendung: < /p>
Profile("a descriptions", how_many_iterations_to_run, () =>
{
// ... code being profiled
});
< /code>
Hat diese Implementierung Fehler? Ist es gut genug zu zeigen, dass Implementaion X schneller als die Implementierung y über Z -Iterationen ist? Kannst du dir vorstellen, wie du das verbessern würdest? < /p>
Bearbeiten < /strong>
Es ist ziemlich klar, dass ein zeitbasierter Ansatz (im Gegensatz zu Iterationen) bevorzugt wird, hat jemand Implementierungen, bei denen die Zeitprüfungen die Leistung nicht beeinflussen?