J'ai un client qui effectue un nombre limité de requêtes Web simultanées. J'utilise WebClient à cette fin. J'ai actuellement un pool de WebClient-s que je crée une fois et utilise celui qui est inactif. Mais cette approche devient un peu lourde, et je me demande s'il y a un avantage à avoir une collection d'instances WebClient préconstruites, ou si leur création à la volée ne poserait pas trop de problèmes?Surcharge de construction WebClient
Répondre
Pourquoi diable auriez-vous un pool de WebClients en premier lieu? Ce sont des objets minuscules et bon marché. Avez-vous déterminé en mesurant que cela est nécessaire et bénéfique? Je suppose pas?
L'instanciation d'objet est presque toujours bon marché. Les connexions HTTP ne sont pas chères non plus. Un pool WebClient est une optimisation prématurée. Vous n'en avez pas besoin - n'hésitez pas à en créer autant que vous le souhaitez.
Selon réflecteur tout ce que le constructeur de WebClient fait est ceci:
public WebClient()
{
this.m_Encoding = Encoding.Default;
this.m_ContentLength = -1L;
}
donc pas vous avantage pas beaucoup d'avoir une piscine.
Il pourrait y avoir une initialisation paresseuse coûteuse ailleurs. – usr
En outre, 'WebClient' est un' Component', qui est 'IDisposable'. – AbleArcher
Si vous utilisez .NET 4.0, vous pouvez paralléliser les requêtes Web. Vérifiez this sur.
Mais à la vraie question, je ne stockerais pas les instances de WebClient dans un tableau, s'il n'est pas nécessaire de réutiliser cette instance à d'autres endroits. Selon le but et le type d'utilisation, vous pouvez également avoir un pool de requêtes avec un dictionnaire de chaînes.
Ensuite, il suffit de réutiliser un client Web au lieu d'avoir plusieurs instances.
- 1. la construction d'un XDocument avec une chaîne téléchargée webclient
- 2. Surcharge Construction par défaut avec la liste d'initialiseurs
- 3. surcharge de surcharge, débordement récursive
- 4. TéléchargerAsyncData de WebClient échoue
- 5. webclient erreur de téléchargement
- 6. Qu'est-ce que webclient & utilisations de webclient dans .net
- 7. C++ STL 101: La fonction de surcharge provoque une erreur de construction
- 8. Appel de WebClient dans WebService
- 9. webclient de haut niveau .net
- 10. Silverlight webclient downloadstringasync question
- 11. WebClient UploadFile errors
- 12. Silverlight WebClient Progressive Télécharger
- 13. Alternative à WebClient
- 14. HEAD avec WebClient?
- 15. RestSharp v. WebClient?
- 16. Mono WebClient encodage question
- 17. WebClient + Problèmes HTTPS
- 18. visual studio C# webclient
- 19. synchronisation webClient téléchargement (silverlight)
- 20. Silverlight: Difficulté avec WebClient
- 21. - Threads ResetEvent et WebClient
- 22. WCF + WebClient + Powershell
- 23. webclient classe têtes
- 24. opérateur de surcharge nouveau sans opérateur de surcharge supprimer
- 25. WebClient Unicode - Quel UTF8?
- 26. Champ interne Access [WebClient]
- 27. surcharge de l'opérateur C++
- 28. surcharge __init__ de unittest.TestCase
- 29. Surcharge de l'opérateur C++
- 30. binaire de surcharge +
Eh bien, c'était la question que je posais - vaut la peine d'avoir une piscine. Merci d'avoir répondu. : p – Barguast
"L'instanciation d'objet est presque toujours bon marché." ce n'est pas vrai. Peut-être relativement bon marché, relativement à des tâches d'entreprise ou de WCF, mais pour une application critique de performance qui est très importante. Il y a quelque temps, j'ai fait une application avec beaucoup d'initialisation d'objets "simples" en C#. Puis je l'ai réécrit en C et j'ai obtenu 4 fois plus de performance après l'avoir réécrite en C mais cette fois sans l'initialisation des objets simples (réutilisation des objets) et j'ai obtenu 3X perfomance grouth (par rapport à l'ancienne version C). Pas tant? –