En essayant de déterminer FPS en C# WPF programme
Je suis en train d'écrire une application pour un touch table l'utilisation de WPF et C#. (Et, je ne suis pas très familier avec WPF. À tous.) Nous soupçonnons que nous n'obtenons pas le framerate nous sommes à "demander" à partir de l'API, donc je suis en train d'écrire mon propre FPS calculatrice. Je suis conscient de mathématiques de calcul basé sur l'horloge interne, je ne sais pas comment accéder à une minuterie dans le Windows WPF/API.
Quelle bibliothèque/commandes ai-je besoin pour obtenir l'accès à une minuterie?
OriginalL'auteur chaosTechnician | 2010-11-10
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes à la recherche pour le Chronomètre. Juste initialiser et de le remettre à chaque démarrage de votre itération. À la fin d'une itération, faites votre calcul.
quel est le calcul pour calculer les FPS à l'aide du Chronomètre, s'il vous plaît?
OriginalL'auteur Erik Noren
Bien que vous pouvez utiliser une Minuterie (qui marshalls ses tiques sur le thread de l'interface utilisateur, provoquant la relativité des problèmes), ou d'un Système.Le filetage.Timer (qui peut lever une exception si vous essayez de toucher toutes les commandes de l'INTERFACE utilisateur), je vous recommande d'utiliser seulement la WPF outils de profilage 🙂
OriginalL'auteur Rob Fonseca-Ensor
Tout d'abord, savez-vous que Microsoft fournit un outil de diagnostic gratuit qui vous indiquera la fréquence d'images de WPF est la mise à jour de l'écran? Je suppose que si vous n'êtes pas convaincu, vous obtenez le nombre d'image que vous demandez, alors vous pouvez peut-être pas confiance en elle, mais je l'ai trouvé un outil fiable. Il est appelé Perforateur, et il fait partie de la WPF Performance Suite, vous pouvez le télécharger en suivant les instructions ici: http://msdn.microsoft.com/library/aa969767
C'est probablement plus simple que d'écrire votre propre.
Aussi, comment êtes-vous exactement à "demander" un taux de trame? Ce que l'API que vous utilisez? Êtes-vous à l'aide de la Timeline DesiredFrameRate propriété? Si oui, c'est plus souvent utilisé pour réduire le taux d'image que de l'augmenter. (Les docs aussi parler d'augmenter le taux de trame pour éviter de le déchirer, mais qui n'a pas vraiment de sens - la déchirure causée par la présentation d'images en dehors de la synchronisation avec le moniteur, et n'est pas un artefact de ralentir les cadences. En tout cas, sur Windows Vista ou Windows 7, vous n'obtiendrez pas les déchirer avec le DWM est activé.) C'est seulement un indice, et WPF ne promet pas de match le suggère la fréquence d'images.
Comme pour la technique de mesure, il existe un certain nombre de façons dont vous pourriez aller. Si vous êtes juste essayer de déterminer si la fréquence d'image est au bon stade, vous pouvez simplement incrémenter un compteur une fois par image (que vous devez généralement faire dans un gestionnaire d'événement pour
CompositionTarget.Rendering
), et de définir une Minuterie pour tirer une fois par seconde, et de montrer la valeur de l'INTERFACE utilisateur, puis de réinitialiser le compteur. Ça va être un peu rude commeDispatcherTimer
n'est pas tout à fait exact, mais il va vous montrer si vous avez 15fps lorsque vous vous attendiez à 30fps, par exemple.Si vous essayez d'obtenir une vision plus précise (par exemple, vous voulez essayer de déterminer si les cadres sont rendus en permanence, ou si vous avez l'impression de recevoir des trames perdues de temps en temps), alors cela devient un peu plus complexe. Mais je vais attendre de voir si Perforateur fait l'astuce pour vous avant de faire des suggestions.
OriginalL'auteur Ian Griffiths
Vous souhaitez envelopper le win32 calendrier des appels que vous auriez normalement appeler (comme
QueryPerformanceCounter
), à l'aide de p/Invoke, ou utiliser quelque chose .NET que déjà les enveloppe.Vous pouvez utiliser
DateTime.Ticks
, mais sans doute pas assez haute résolution. Le Chronomètre de la classe utilise QueryPerformanceCounter sous les couvertures.Si vous voulez quelque chose qui est réutilisable sur un grand nombre de systèmes, plutôt qu'un simple diagnostic, être averti de processeur problèmes liés w/QPC et le Chronomètre. Voir cette question: Pouvez la .NET Chronomètre classe CETTE terrible?
OriginalL'auteur Merlyn Morgan-Graham