[Winform] BackgroundWorker et interface MDI

Le
fragmonster
Bonjour,
Je dveloppe une appli winform MDI dans laquelle (comme son nom
l'indique) on est capable d'ouvrir plusieurs sous fentres au sein
desquelles on peut lancer le tlchargement de donnes via web
services.

Donc, dans chaque sous fentre j'ai un objet BackgroundWorker et un
proxy web service. Le backgroundWorker lance l'appel la mthode web
en tache de fond. Tout a fonctionne trs bien.

Si j'ouvre deux fentres et que je lance le tlchargement, j'ai bien
mes deux progressBar qui avancent en parallle.

Par contre, si j'ouvre 4 fentres et que je lance les 4
tlchargements, seuls les deux premiers se lancent en parallle et
ds que l'un d'entre eux se termine, le 3me dmarre.

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 tlchargement
simultanment.

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

(Pour info, j'ai un dual core et j'ai vaguement l'impression que le
chiffre 2 vient de l)
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