J'essaie d'utiliser l'objet .NET Backgroundworker dans une application que je développe.Priorité de thread de l'objet .work arrière-plan
Tout le matériel sur Internet dit que cet objet s'exécute dans le "background" mais nulle part j'ai pu confirmer que ce thread d'arrière-plan s'exécute en effet dans un mode "basse priorité". Cette question se pose parce que dans Windows (je suppose) une tâche de fond peut fonctionner dans un mode de priorité «normal» ou «en dessous de la normale» ou «faible».
Dans ma demande, j'ai essayé de définir la priorité moi-même dans la fonction DoWork en appelant ...
Thread.CurrentThread.Priority=ThreadPriority.Lowest
...
mais cela semble avoir aucun effet. L'arrière-plan ignore-t-il cet appel?
Je voudrais expliquer un peu plus:
Ma demande est un client Internet qui recueille des données en temps réel sur la température, l'humidité, etc. d'une chambre et télécharge vers une page Web (pas un service Web) en utilisant
system.net.webclient.UploadValuesAsync(...)
appelle
J'ai écrit l'application de telle sorte que l'interface graphique du client recueille les données de la chambre, horodatées et ensuite les files d'attente pour le téléchargement comme si
...
Synclock objlock
debug.print("Queueing reading...")
dataQ.Enque(reading)
End Synclock
...
La fonction DoWork de BackgroundWorker de dequeues puis ajouts comme si ...
..............
Do
if dataQ.count() <> 0 then
Synclock objlock
reading = dataQ.DeQue()
End Synclock
Dim client As New System.Net.WebClient
...put the reading in NameValueCollection and upload to server page
req = new NameValueCollection
...
...
client.UploadValuesAsync(uri, "POST", req)
endif
thread.sleep(1) 'without this line the CPU usage goes upto 100% and seems to slow other tasks!
Loop
..... ...
Lorsque j'exécute le programme, je constate que chaque fois que UploadValuesAsync est appelé, la fenêtre de débogage s'arrête. J'avais également ajouté des instructions de débogage pour voir le nombre de lectures dans la file d'attente à tout moment. Si cette tâche est réellement exécutée avec une priorité faible, je m'attendais à voir le nombre de files d'attente augmenter rapidement à mesure que les données sont acquises, puis diminuer seulement lorsque le premier plan est inactif et que les données ne sont pas acquises. Mais ce n'est pas le cas. Dès qu'une lecture est ajoutée à la file d'attente, elle est supprimée et téléchargée. Donc, le nombre de files d'attente est toujours 1 ou 0!
Y a-t-il quelque chose qui ne va pas dans ma démarche? Est-ce que je ne devrais pas utiliser l'objet background-worker? Par ailleurs, il s'agit d'un ordinateur portable dual-core fonctionnant sous Windows Xp.
Comment se fait-il que je ne puisse pas marquer TOUTES les réponses comme utiles? Chacun d'eux a quelques suggestions utiles ...! –
Vous ne pouvez sélectionner qu'une seule réponse, mais vous pouvez voter toutes les réponses que vous trouvez utiles. –