2010-08-10 13 views
1

Donc, je cours un service Windows en tant qu'utilisateur. Droits d'administrateur. Ce service lance un EXE via Process.Start. Dans le fichier EXE, un contrôle WebBrowser est utilisé pour naviguer vers un site Web, se connecter, gérer tous les échanges de sécurité et obtenir des données. Il revient, écrit les données dans un fichier.Pourquoi HTTPWebRequests et le contrôle WebBrowser semblent-ils fonctionner plus lentement lorsqu'ils sont exécutés à partir d'un fichier EXE appelé par un service Windows?

Ce n'est pas le processus le plus efficace, certes, mais ma situation de travail me colle à l'affaire. Quoi qu'il en soit, lorsque vous teste directement le WebBrowser EXE, il s'exécute très rapidement, mais lorsqu'il s'exécute à partir du service, il ralentit considérablement. Pourquoi cela serait-il? Y a-t-il des goulots d'étranglement sur les services? J'ai essayé d'augmenter la priorité du thread de démarrage du processus WebBrowser exe dans le processus.StartInfo de celui-ci avant que je l'exécute, et cela fonctionne un peu, mais il est toujours extrêmement lent.

Dans l'EXE WebBrowser, j'attends que les pages soient terminées ou que certains éléments apparaissent en interrogeant constamment l'état du WebBrowser. Cela pourrait-il être la cause de cette lenteur?

J'ai également observé des ralentissements très similaires lors de l'utilisation de HTTPWebRequest pour faire le même genre de choses à partir d'un service - il fonctionnera relativement vite à partir d'une application Forms, mais très lentement à partir d'un service.

Alors oui, ma situation peut se résumer ainsi:

Pourquoi les transactions WebBrowser et HttpWebRequest semblent prendre plus de temps lors de l'exécution par un EXE appelé à partir d'un service Windows en cours d'exécution en tant qu'utilisateur admin?

+0

Rappelez-vous également que vous ne pouvez pas utiliser WebBrowser dans un service sous Windows 2008 en raison de limitations de connexion simultanées dans wininet. –

Répondre

0

Il y aura des tonnes de paramètre manquant car la ruche HKEY_CURRENT_USER n'est pas chargée en service (LoadUserProfile n'est pas appelé en serivce). Je ne suis même pas sûr comment les politiques de zone de sécurité d'IE fonctionnent sans les définitions de zone.

Et IE a une petite limite de connexions simultanées, 6 sur une connexion haut débit dans IE8. Si votre serveur Web a plus d'utilisateurs simultanés que la limite, quelqu'un doit attendre.

+0

Hmmm wow! Je ne le savais pas. Cela pourrait expliquer le problème, je suppose. –

+0

En outre, après quelques tests supplémentaires, la différence de vitesse pourrait avoir été juste une série d'essais étranges, car avec les mêmes paramètres, il fonctionne à des vitesses comparables maintenant. hmmmmmmm. –