[Winform] BackgroundWorker et interface MDI

Le
fragmonster
Bonjour,
Je développe une appli winform MDI dans laquelle (comme son nom
l'indique) on est capable d'ouvrir plusieurs sous fenêtres au sein
desquelles on peut lancer le téléchargement de données via web
services.

Donc, dans chaque sous fenêtre j'ai un objet BackgroundWorker et un
proxy web service. Le backgroundWorker lance l'appel à la méthode web
en tache de fond. Tout ça fonctionne très bien.

Si j'ouvre deux fenêtres et que je lance le téléchargement, j'ai bien
mes deux progressBar qui avancent en parallèle.

Par contre, si j'ouvre 4 fenêtres et que je lance les 4
téléchargements, seuls les deux premiers se lancent en parallèle et
dès que l'un d'entre eux se termine, le 3ème démarre.

En fait, tout se passe comme si j'avais un pool de 2 Thread. Quoi que
je fasse je ne suis pas capable de lancer plus de 2 téléchargement
simultanément.

Y a t-il une limitation du backgroundWorker?? Pourtant j'ai bien une
instance de backGroundWorker par fenêtre fille.

(Pour info, j'ai un dual core et j'ai vaguement l'impression que le
chiffre 2 vient de là)
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jérémy Jeanson
Le #18641241
Bonjour Fragmonster,

Je pense que tu fais une petite confusion entre multi-thread,
multi-core, hyper-threading...

Quelle que soit ta machine, elle est capable de lancer plusieurs threads
(sans quoi tu ne pourrais pas faire grand chose d'un PC). Pour faire
simpl le BackGroundWorker est là pour te permettre de simplifier
l'exécution des tâches asynchrones. Cependant si la ressource dont le
BackGroundWorker à besoin n'est pas disponible, il ne peut pas faire de
miracle et va réalisé son job dès que possible. Dans ton cas il faudrait
donner un peu plus d'information sur le code que tu utilise pour ton
téléchargement...

Notes que si ton code utilise des ressources de Internet Explorer ou son
gestionnaire de téléchargement, celui-ci est effectivement limité par
défaut à 2 téléchargement en parallèle.

Je penses donc que dans ton cas il s'agirait plutôt d'une limitation due
à ta méthode de téléchargement.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
fragmonster
Le #18641701
En fait je télécharge des données par web service. J'ai donc un proxy
par fenêtre fille ainsi qu'un backgroundWorker qui lance l'appel à la
méthode web en tache de fond.

J'ai illustré le problème à l'aide d'une petite video :
http://screencast.com/t/Fju2Dso8

Comme vous le voyez, j'ouvre 4 fenêtres et je lance les 4 appels. Les
deux premiers partent, et dès que l'un se termine le 3ème démarre. Ca
voudrait dire que je suis limité à 2 appels web service simultanés
même si j'ai 4 proxy différents?
Jérémy Jeanson
Le #18642081
Effectivement tu peux avoir un souci avec ton proxy. As tu testé en
executant deux applciations en même temps pour savoir si le souci
n'était pas une limitation sur ton service (ou serveur)?
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
fragmonster
Le #18642271
J'ai finalement trouvé la réponse à mon problème : La limitation es t
dûe aux spécification de HTTP1.1 qui en fait limite à 2 le nombre de
connexions simultanées à un serveur distant.

Mais on peut contourner le pb via l'app.config

<configuration>
<connectionManagement>
<add address="*" maxconnection="40" />
</connectionManagement>

...

Source : http://msdn.microsoft.com/en-us/library/aa480507.aspx

Merci
Delf
Le #18645521
Jérémy Jeanson a pensé très fort :

Notes que si ton code utilise des ressources de Internet Explorer ou son
gestionnaire de téléchargement, celui-ci est effectivement limité par défaut



Utiliser XP-Antispy pour passer cette limite à 10, si je ne me trompe
pas (et si le problème vient de là).

--
Delf
Publicité
Poster une réponse
Anonyme