J'ai une application qui a une boucle, partie d'un "Scheduler", qui fonctionne à tout moment et qui est le cœur de l'application. Un peu comme une boucle de jeu, juste que mon application est une application WPF et ce n'est pas un jeu. Naturellement, l'application se connecte à de nombreux points, mais le Scheduler fait un suivi sensible, et parfois il est impossible de simplement dire à partir des logs ce qui a pu se tromper (et par erreur je ne veux pas d'exceptions) ou l'état actuel. Étant donné que la boucle interne du planificateur s'exécute à de courts intervalles, vous ne pouvez pas effectuer de journalisation basée sur les E/S de fichier (ou en utilisant l'Observateur d'événements). D'abord, vous devez le regarder en temps réel, et deuxièmement, le fichier journal augmentera très rapidement. Donc, je pensais à des façons de montrer ces données à l'utilisateur dans le temps réel, certaines choses que je compte:enregistrement en temps réel
- Afficher les données en temps réel dans l'interface utilisateur
- Utilisez AllocConsole/WriteConsole pour afficher ces informations dans une console
- Utiliser une application console différente qui affiche ces informations, la communication entre le planificateur et l'application de la console en utilisant des tuyaux ou d'autres techniques IPC
- Utilisez Analyseur de performances Windows et en quelque sorte le nourrir avec ces informations
- ETW
Afficher dans l'interface utilisateur aurait ses problèmes. D'abord, il ne s'intègre pas avec l'interface utilisateur que j'avais en tête pour ma demande, et je ne veux pas compliquer l'interface utilisateur juste pour cela. Ce diagnostic ne se produirait que rarement. Deuxièmement, il y aura une protection des données non triviale, car le planificateur a son propre thread.
Une fenêtre de console séparée fonctionnerait probablement, mais je suis toujours inquiet si ce n'est pas trop de seuil. Allouer ma propre console, car il s'agit d'une application Windows, serait probablement mieux qu'une application de console différente (3), car je n'ai pas besoin de me soucier de la communication IPC et de la communication non bloquante. Cependant, un utilisateur peut fermer la console que j'ai allouée, et cela poserait problème dans ce cas. Avec un processus séparé, vous n'avez pas à vous en préoccuper.
En supposant qu'il existe une API pour Performance Monitor, il ne serait pas trop bien intégré avec mon application ou apparent aux utilisateurs. Utiliser ETW ne résout rien non plus, juste une idée aléatoire, j'ai encore besoin d'afficher cette information en quelque sorte. Ce que d'autres pensent, y aurait-il d'autres moyens que j'ai manqués?
Que comptez-vous faire de l'utilisateur avec les informations affichées? Si vous souhaitez collecter des données hors ligne pour une analyse ultérieure avec un impact minimal sur les performances, ETW semble être un bon choix. – jnoss
ce n'est pas pour une utilisation ultérieure, ce serait pour les utilisateurs de pouvoir dépanner quand quelque chose n'est pas apparent –
-1 Il est difficile de comprendre quelle est réellement votre question, ou ce que vous êtes réellement après. –