Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Winform] BackgroundWorker et interface MDI

5 réponses
Avatar
fragmonster
Bonjour,
Je d=E9veloppe une appli winform MDI dans laquelle (comme son nom
l'indique) on est capable d'ouvrir plusieurs sous fen=EAtres au sein
desquelles on peut lancer le t=E9l=E9chargement de donn=E9es via web
services.

Donc, dans chaque sous fen=EAtre j'ai un objet BackgroundWorker et un
proxy web service. Le backgroundWorker lance l'appel =E0 la m=E9thode web
en tache de fond. Tout =E7a fonctionne tr=E8s bien.

Si j'ouvre deux fen=EAtres et que je lance le t=E9l=E9chargement, j'ai bien
mes deux progressBar qui avancent en parall=E8le.

Par contre, si j'ouvre 4 fen=EAtres et que je lance les 4
t=E9l=E9chargements, seuls les deux premiers se lancent en parall=E8le et
d=E8s que l'un d'entre eux se termine, le 3=E8me d=E9marre.

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=E9l=E9chargement
simultan=E9ment.

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

(Pour info, j'ai un dual core et j'ai vaguement l'impression que le
chiffre 2 vient de l=E0)

5 réponses

Avatar
Jérémy Jeanson
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
Avatar
fragmonster
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?
Avatar
Jérémy Jeanson
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
Avatar
fragmonster
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>
<system.net>
<connectionManagement>
<add address="*" maxconnection="40" />
</connectionManagement>
</system.net>

<system.web>
...

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

Merci
Avatar
Delf
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