Do you really need a precise timer or what you really need is something that give a sort? For example:
static class AutoIncrement { private static long num; public static long Current { get { return Interlocked.Increment(ref num); } } } Console.WriteLine(AutoIncrement.Current); Console.WriteLine(AutoIncrement.Current); Console.WriteLine(AutoIncrement.Current); Console.WriteLine(AutoIncrement.Current); Console.WriteLine(AutoIncrement.Current);
This is guaranteed to be unique, and to change every time, and to be sorted. Its precision is better than microsecond. Its precision is absolute on a single PC.
or if you really want Timestamps...
static class AutoIncrement { private static long lastDate; public static DateTime Current { get { long lastDateOrig, lastDateNew; do { lastDateOrig = lastDate; lastDateNew = lastDateOrig + 1; lastDateNew = Math.Max(DateTime.UtcNow.Ticks, lastDateNew); } while (Interlocked.CompareExchange(ref lastDate, lastDateNew, lastDateOrig) != lastDateOrig); return new DateTime(lastDateNew, DateTimeKind.Utc); } } } DateTime ac = AutoIncrement.Current; Console.WriteLine(CultureInfo.InvariantCulture, "{0} {1:yyyy/MM/dd HH:mm:ss.fffffff}", ac.Ticks, ac);
This last variant uses as a base DateTime.UtcNow, but each call if it isn't changed, it increments it by one.
Precision and accuracy of DateTime, Eric Lippert blogs.msdn.com/b/ericlippert/archive/2010/04/08/…Stopwatchthat is never reset.