// Collection of code snippets by Arne Vajhøj // posted to eksperten.dk, usenet and other places (2002-now) using System; using System.Text; using System.Threading; public class MainClass { private static int count; private static long last; private static long expected; private static double dev; public static void Main(string[] args) { Test(1000); Test(100); Test(10); Test(1); TestGC(1000); TestGC(100); TestGC(10); TestGC(1); } static void Test(int msec) { count = 0; last = 0; expected = msec * 10000; dev = 0; Timer t = new Timer(new TimerCallback(DoIt), null, 0, msec); while(count < 10000/msec) { Thread.Sleep(1); } t.Dispose(); Console.WriteLine(String.Format("{0:d} msec intervals : error = {1:0.00}%",msec,(dev/count)/expected)); } static void TestGC(int msec) { count = 0; last = 0; expected = msec * 10000; dev = 0; Timer t = new Timer(new TimerCallback(DoIt), null, 0, msec); while(count < 10000/msec) { StringBuilder sb = new StringBuilder("ABC"); } t.Dispose(); Console.WriteLine(String.Format("{0:d} msec intervals (GC) : error = {1:0.00}%",msec,(dev/count)/expected)); } static void DoIt(Object o) { if(last == 0) { last = DateTime.Now.Ticks; } else { long t = DateTime.Now.Ticks; dev += Math.Abs(t - last - expected); count++; last = t; } } }