TickCount
just reads a constantly increasing counter. It’s just about the simplest thing you can do.
DateTime.UtcNow
needs to query the system time – and don’t forget that while TickCount
is blissfully ignorant of things like the user changing the clock, or NTP, UtcNow
has to take this into account.
Now you’ve expressed a performance concern – but in the examples you’ve given, all you’re doing is incrementing a counter. I would expect that in your real code, you’ll be doing rather more work than that. If you’re doing a significant amount of work, that’s likely to dwarf the time taken by UtcNow
. Before doing anything else, you should measure that to find out whether you’re actually trying to solve a problem which doesn’t exist.
If you do need to improve things, then:
- You can use a timer rather than creating a new thread explicitly. There are various kinds of timers in the framework, and without knowing your exact situation, I can’t advise on which would be most sensible to use – but it feels like a better solution than starting a thread.
- You can measure a few iterations of your task, then guess how many will actually be required. You might want to then execute half that many iterations, take stock of how long that’s taken, then adjust the number of remaining cycles accordingly. Of course, this doesn’t work if the time take per iteration can vary wildly.