Système de Windows de temps avec précision à la milliseconde
Liées à ma question précédente, mais avec le C#, j'ai besoin précis de l'heure du système, y compris millisecondes.
C# temps de la fonction de la précision jusqu'à 10 à 15 millisecondes, mais pas exactement de 1 milliseconde.
La même chose est le cas avec la File d'attente de compteur de performance. Est-il un autre moyen pour obtenir la précision jusqu'à exacte de l'ordre de la milliseconde?
Vous devez vous connecter pour publier un commentaire.
Windows ne voulez pas gaspiller de l'électricité par la mise à jour de l'horloge système de l'1000 fois par seconde, de sorte que la valeur par défaut est de ne mettre à jour de 60 à 100 fois par seconde. Si vous réglez la minuterie multimédia à 1 ms, vous pouvez obtenir 1 ms résolution de l'horloge, mais ce n'est pas recommandé.
À donner plus de détails sur les économies d'électricité, ce qui se passe lorsque le PROCESSEUR est inactif pendant une période de temps, c'est qu'il peut aller dans une très-faible puissance de l'état. Chaque fois qu'il est interrompu (par exemple, pour incrémenter les tops d'horloge), il doit quitter sa très faible puissance de l'état et de l'utilisation des lots de l'électricité pour l'ensemble du PROCESSEUR de service d'interruption. En d'autres termes, la puissance n'est pas en incrémentant le tic-tac d'horloge, c'est dans le maintien de la CPU éveillé pour le faire.
Depuis mon ordinateur portable utilise 10W au ralenti lorsque la fréquence de l'horloge est à 60Hz et 11W quand il est 1000Hz, et je reçois de 300 minutes de vie de la batterie, que le ralentissement de l'horloge est de me donner près de 30 minutes supplémentaires de vie de la batterie!
timer interrupt
. Windows est loin d'être bon à l'efficacité électrique de bien (50% moins efficace que android, et 20% de moins que mac OS), mais son pas de raison de faire pire en effet. Noyau tiques sont utilisés pour appeler expiré (ou agrégés) minuteries rappels, re-mise à jour du thread/processus de planification, et en incrémentant le mondial de l'OS de comptage de cycles.DateTime.Now
n'est pas assez précis, mais vous n'êtes pas en montrant comment obtenir la précision jusqu'à...Vous pouvez utiliser cette DateTimePrecise classe pour obtenir une haute précision de temps dans .NET
Mise à JOUR
Le CodeProject lien ne fonctionne plus. J'ai tiré le code à partir de archive.org et incorporé ici pour référence future. Ce code est inclus ici, "comme", exactement de la façon dont il a été inclus sur la CodeProject page.
Date.UtcNow
comme sa base, puis calcule le temps écoulé depuisUtcNow
à l'aide du système de haute précision de la minuterie. Parce qu'il est dérivé deDateTime.UtcNow
, il ne peut jamais être plus précis que cela. Vous devriez également vérifier laStopwatch.Frequency
pour votre matériel pour déterminer que la haute précision de la fonctionnalité est en fait de travail.Essayer Système.Diagnostics.Chronomètre haute résolution pour le chronométrage.
Essayer le natif DateTime.Les tiques pour le système de l'exactitude du temps jusqu'à une centaine de nanosecondes; 1 milliseconde = 10000 tiques.
DateTime.Ticks
n'est pas plus précis queDateTime.Millisecond
. En interne,DateTime.Millisecond
appelsDateTime.Ticks