using System.Diagnostics;
public TimedAction(string name, Action action) {
public void PrintStats() {
var elapsed = Math.Floor(watch.ElapsedTicks / (double)(Stopwatch.Frequency / (1000 * 10))) / 10;
Console.WriteLine($"\t{name}: {elapsed}ms");
static void TimeActions(ulong iterations, TimedAction[] actions) {
var iterations_left = iterations;
while (iterations_left != 0) {
foreach (var action in actions) {
Console.WriteLine($"Benchmarking {iterations} iterations...\n");
Console.WriteLine($"elapsed runtime:");
foreach (var action in actions) {
public float Radius { get; set; }
public float RadiusSq => Radius * Radius;
private float _radius_sq;
_radius_sq = value * value;
public float RadiusSq => _radius_sq;
public static void Main() {
var test_a = new TestObjectGetter();
var test_b = new TestObjectCached();
new TimedAction("getter", () => {
total_a += test_a.RadiusSq;
new TimedAction("cached", () => {
total_b += test_b.RadiusSq;
TimeActions(10*1000000, actions);