7
votes

Une minuterie vs trois performances de la minuterie

J'ai une question sur l'utilisation de system.timers.timer dans mes applications .net.

J'ai trois événements différents, on déclenche chaque seconde, une autre déclenche chaque minute et le dernier On déclenche toutes les demi-heures.

est-ce meilleur, la performance sage, d'avoir une minuterie ou trois?

Le moyen de le faire avec une minuterie est de vérifier ELAPSEDEventargs < / code> 'Signaltime et comparez-le à un temps déjà mesuré. Bien sûr, cela ne fonctionne pas bien si vous avez changé la dateTime, mais ce n'est pas le problème ici. Fondamentalement, chaque seconde, je vérifie si une minute ou une demi-heure est passée aussi ...

Mon inquiétude est que l'utilisation de 3 minuteries crée trop de frais généraux. Ai-je tort et dois-je utiliser 3 pour la simplicité et la clarté ou est-ce que 1 minuterie est suffisamment minuteur?

code: xxx

minutes-vertical et Semihourspan sont des débutants réadonnants.


6 commentaires

Cela ne répond pas à la question, mais une autre option consiste à avoir deux minuteries (une pour les secondes, une pour la minute / 30 minutes).


Est-ce mieux, la performance sage, d'avoir une minuterie ou trois que vous pouvez répondre à cela. Est-ce un goulot d'étranglement de votre application?


performances ne sera pas affectée de manière mesurable si vous utilisez une seule minuterie (deux si ne rendez pas votre code lent, avez-vous Profil C'est?) Et vous sauverrez les frais généraux (dans les ressources) de trois minuteries. Mais ce que vous avez à considérer est Comment exécuter que des opérations (si vous utilisez une seule minuterie, vous devrez peut-être les exécuter dans la piscine car Synchrone Exécution séquentielle peut retarder le dernier un trop de).


Dire combien cela affectera sur la performance, vous devez le profiler comme indiqué dans d'autres commentaires (OMI, cela n'affectera pas). Avoir trois minuteries créera des conditions de course susceptibles de devenir très grossières.


[Quel est le nombre maximum de minuteries qu'un programme peut créer?]: blogs.msdn.com/b/oldnewthing/archive/2009/08/27/9886147.aspx


@Lukas J'ai fait du profilage et j'ai constaté que beaucoup de temps ont été passés dans l'ELAPSEDHANDLER, mais cela pourrait être parce qu'il vérifie si les autres événements doivent également être tirés. J'ai lu quelque part que sous une minuterie commune est utilisée autant que possible, il est donc plus simple d'utiliser 3 minuteries. Postera mon code.


3 Réponses :


0
votes

3 TIMERES Ajoutez très peu de frais générales par rapport à 1, et le code sera probablement bien meilleur (en termes de lisibilité et de maintenabilité)


0 commentaires

0
votes

Je pense que je pense que les chèques avec les personnes ont plus de frais généraux que trois minuteries, outre que vous puissiez entrer dans des situations étranges essayant d'utiliser une minuterie.

J'irais avec trois minuteries.


0 commentaires

5
votes

Cela ne va pas faire une grande partie de la différence de chaque sens. Quel que soit le nombre de minuteries, il n'y a qu'une seule boucle en arrière-plan. Au moins efficace, vous utiliserez 3 threads de la piscine de fil, mais il y a un lot disponible, donc ce n'est pas une grosse affaire. Si cela rend votre code plus simple à lire, je le dirais.

Gardez à l'esprit mais cela ne s'applique qu'à threading.Timer (AKA TIMERS.TIMER ). Forms.Timer se comporte un peu différemment et il serait probablement préférable de s'en tenir à l'un de ceux qui ne fonctionne que sur le thread de l'interface utilisateur afin que vous puissiez passer à des problèmes de synchronisation.

threading.timer vs. Timer

Quelques ressources supplémentaires:

http: //social.msdn.microsoft.com/forums/en-us/netfxbcl/thread/f9a1c67d-8579-4baa-9952-20B3C0DAF38A/

Comment De nombreux instances System.Timers.Timer puis-je créer? Jusqu'où puis-je mettre à l'échelle?


1 commentaires

D'accord, j'ai décidé d'aller avec la version de la minuterie la plus maintenue.