Fil vs Minuterie en C#
J'ai deux implémentations de vérifier les données à l'entrée:
À l'aide de System.Timers.Timer
:
public void startTimer()
{
try
{
System.Timers.Timer timer = new System.Timers.Timer(1);
timer.AutoReset = true;
timer.Elapsed += new ElapsedEventHandler(commStart);
timer.Enabled = true;
timer.Start();
}
catch(Exception ex){}
}
private void commStart(){object sender, EventArgs eArgs}
À l'aide de Thread
:
public void startThread()
{
Thread threadGeneralComm = new Thread(new ThreadStart(commStart));
threadGeneralComm.Start()
}
private void commStart()
{
while(true)
{
//checking data
Thread.Sleep(1);
}
}
De sorte que vous pouvez le voir, à la fois de la mise en œuvre des moyens, il va vérifier les données et attendre 1 milliseconde. Beaucoup de gens se plaignent à moi que l'utilisation de la Minuterie est pire que d'utiliser du Fil, et en utilisant un Thread est 10 fois plus rapide. Est-ce le cas?
que voulez-vous dire?
Les données provenant de l'endroit où? Comme d'autres affiches ont dit, les bureaux de vote ne devrait pas être nécessaire en préventive mutitasker - il gaspille de l'UC et ajoute de la latence.
Les données provenant de l'endroit où? Comme d'autres affiches ont dit, les bureaux de vote ne devrait pas être nécessaire en préventive mutitasker - il gaspille de l'UC et ajoute de la latence.
OriginalL'auteur olidev | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
Les deux options sont pauvres. Ils sont les méthodes d'interrogation et ne sera donc l'utilisation de l'UC pour aucune raison, quand il n'y a pas de données.
Si vous ne pouvez pas utiliser un événement piloté par approche alors vous devriez regarder pour une solution basée sur le blocage de la file d'attente.
L'interrogation est pauvre parce que quand il n'y a pas de données à traiter votre fil à plusieurs reprises réveiller et de consommer du CPU quand il n'y a rien à faire.#
Est pas souvent le cas, toutefois, cependant, que l'interrogation est utilisé en amont?
Je ne vois pas pourquoi une minuterie de mise en œuvre requiert des bureaux de vote.
Je n'ai pas dit le contraire. juste en faisant le point que juste parce qu'un développeur est à l'aide de OnSomeEvent() ne veut pas dire que les événements sont en train d'être utilisé sous le capot.
OriginalL'auteur David Heffernan
Les applications Windows sont fondées sur l'événement driven architecture. Déplacement de la souris, clés de la presse, montrant l'INTERFACE utilisateur, le déplacement de la fenêtre, redimensionnement, etc ils sont tous les événements. Quand il y a un événement à votre application, windows attribuer cet événement à quelque chose qui s'appelle l'Application de la File d'attente et la fenêtre de l'application ont continu boucles pour arriver à l'événement de l'application de la file d'attente, et les processus de l'événement à l'aide du Répartiteur.
De cette façon, un TIMER est un événement, une fois enregistré, le système d'exploitation mis le message de la minuterie sur l'application de la file d'attente de sorte que l'application peut traiter de la minuterie. La MINUTERIE fonctionne toujours sur le thread d'INTERFACE utilisateur. Donc, c'est pour le système d'exploitation si l'événement TIMER sur l'application de la file d'attente ou pas. Lorsque l'OS est trop occupé, vous risquez de manquer votre les événements de la minuterie.
Un thread est un organe indépendant du contexte d'exécution, qui est garanti pour être exécuté.
Les fils peuvent être garantis pour être exécuté si la priorité, par rapport au thread principal. Ce concept peut être appliqué à des minuteries.
OriginalL'auteur
La différence entre les solutions
La principale différence entre les solutions, c'est que le minuterie sera appelée à chaque milliseconde, alors que le single fil solution d'attente d'une milliseconde entre chaque case.
Dans le timer de la solution, la vérification des données va se produire en parallèle - un rappel est fait sur un autre thread sur le pool de threads.
Par exemple, lors de l'utilisation d'une minuterie avec 10 ms d'intervalle et de la méthode de rappel prend 20ms de processus, il y a plusieurs rappels sur plusieurs threads du pool de threads.
Seul thread est mieux (dans ce cas)
En supposant que dans votre exemple, le traitement prend plus de 1 ms, il explique pourquoi il est beaucoup plus lent que d'avoir un seul thread.
Je suppose qu'il pourrait y avoir une meilleure solution que celle-ci - à l'aide d'un DB de déclenchement, certains événements ou de rappel... Mais si la seule façon d'obtenir de l'information est de contrôler activement les données, puis en utilisant le thread unique solution est meilleure.
OriginalL'auteur Elisha
Si vous êtes en attente pour les Données de venir vient comme un fichier, vous pouvez utiliser FileSystemWatcher
Bureau de vote est toujours à la ressource intenstive, mieux utiliser Hollywood Principe Du Modèle De Conception
OriginalL'auteur Bek Raupov