Bonjour,
Je cherche une solution en C# pour calculer le nombre de FPS dans une appli WPF ...
d'avance
Bonjour,
Je cherche une solution en C# pour calculer le nombre de FPS dans une appli WPF ...
d'avance
Avec un code dans le genre cela doit pouvoir le faire:
Cela devrait correspondre à ton besoin ; l'idée étant de s'abonner aux événements de début de rendu de l'image et de calculer le temps écoulé entre deux Frame.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public Window1() { InitializeComponent(); CompositionTarget.Rendering +=new EventHandler(CompositionTarget_Rendering); } long FrameRate; long LastFrameRate; long LastTick = -1; public long GetFrameRate() { if (sw.ElapsedTicks - LastTick >= 1000000) { LastFrameRate = FrameRate; FrameRate = 0; LastTick = sw.ElapsedTicks; } FrameRate++; return LastFrameRate; } System.Diagnostics.Stopwatch sw = null; void CompositionTarget_Rendering(object sender, EventArgs e) { if (LastTick == -1) { sw = System.Diagnostics.Stopwatch.StartNew(); LastTick = 0; } txtFrame.Text = string.Format("{0} fps", GetFrameRate()); }
Ta fiche Xaml doit contenir un TextBox nommé txtFrame pour pouvoir visualiser le résultat
je viens de l'essayer mais ça n'affiche pas le FPS réel
si on le compare avec Perforator, ce n'est pas du tout la même chose ...
![]()
un petit up
j'ai cherché vraiment partout mais j'ai rien trouvé de pratique ...
Le truc c'est que la techno est assez maline. Je m'explique : contrairement à une véritable application DirectX où toute l'image est raffraichie n fois par seconde, en WPF seules certaines zones sont raffraîchies lorsque cela est vraiment nécessaire (suite à un changement d'aspet d'un control graphique). Là encore, le rafraichissement ne s'applique qu'à certaines zones particulières comme une case d'une grille. Cela permet d'économiser de manière notable le CPU et la GPU. L'algorithme de rafraichissement n'est pas publié mais semble malgrés tout relativiement efficace.
Tout ça pour dire que l'on ne peut pas vraiment parler de FPS comme on pourrait le faire en DirectX.
Désolé.
Partager