Won't this act as a busy wait in that it would fully occupy one core of the CPU? If so, you might consider something like a Thread.Sleep(N), where N >=2. That will mean that the CheckPerformanceCounter won't be called again immediately, but it would mean that the accuracy would degrade because you could be up to N milliseconds late in a tick. The larger the value of N that is used, the worse the accuracy, but the lighter the load on the CPU, I would expect.