J'essaie d'utiliser l'API d'E/S Async Stream.BeginWrite dans .NET pour une situation à haut débit avec de nombreux messages courts. En tant que tel, une API scatter/gather réduit énormément le nombre de commutateurs de contexte (et d'utilisation du processeur). Cette API utilise-t-elle l'API LPBUFFERS Win32? Existe-t-il une autre API pour Scatter/Gather I/O?Scatter/rassembler des E/S socket asynchrones dans .NET
Répondre
Il n'y a aucun moyen de faire des E/S socket scatter/gather dans .NET. Selon un article de blog MSFT, il peut y avoir une API similaire dans .NET 4.5 (quoi que ce soit ...)
Je serais surpris si vous pouviez obtenir les APIs de scatter/gather de la BCL (c'est pour le l33t w1n32 haxx0rz, vous savez?), Mais il y a toujours P/Invoke (qui est étonnamment facile à utiliser, je ' J'ai trouvé).
Si vous voulez creuser dans les entrailles du cadre, il y a quelques façons de le faire:
1) réflecteur
2) MS a récemment ouvert la source à des fins de débogage, vous pouvez dans l'étape avec VS2008 si vous activez l'option sous Debugging/options/général
3) Koders.com semblent accueillir la source cadre aussi:
http://www.koders.com/csharp/fidCE09E83BE706D0BD370658C3785E82D3A13FC2CE.aspx?s=flush()#L109
En regardant les sources .net, la réponse acceptée semble être fausse.
SocketAsyncEventArgs
a un attribut BufferList
. Lorsque cela est utilisé, au lieu de l'attribut Buffer
qui ne peut contenir un seul bloc contigu de mémoire, les opérations peuvent utiliser scatter/gather DMA, comme Socket.SendAsync(SocketAsyncEventArgs)
utilise WSASend
en interne, que
permet des tampons multiples émission à spécifié rendant applicable à la ventilation/regroupement type d'E/S
et Socket.SendAsync(SocketAsyncEventArgs)
utilise WSARecv
que
permet à de multiples tampons de réception à préciser le rendant applicable au scatter/gather type d'E/S
Je n'ai pas le .net 3.5 sources à portée de main, mais BufferList
existe depuis 3,5 .net, donc scatter/gather aurait pu être pris en charge depuis .net 3.5. La configuration minimale requise pour WSASend et WSARecv est documentée sous Windows Vista/Server 2003.
N.B. Je ne sais pas quel flux vous utilisez, mais NetworkStream.BeginWrite
envoie un seul tampon au WSASend, donc vous ne pouvez pas l'utiliser pour disperser/rassembler.
- 1. C# socket TCP, lecture et écriture asynchrones à la "même" heure (.NET CF), comment?
- 2. Quel est le but des méthodes asynchrones? (.NET)
- 3. Gestion des appels asynchrones
- 4. Quand utiliser des opérations asynchrones dans asio
- 5. Qu'est-ce qu'une "opération d'E/S asynchrones" dans .NET?
- 6. émet .NET C# Socket Concurrency
- 7. API asynchrones
- 8. Silverlight appels asynchrones et des méthodes anonymes
- 9. Mauvaise compréhension des appels asynchrones GWT
- 10. Android OpenGL ES manque des composants?
- 11. Défilement dans Open GL ES
- 12. Socket SSL dans Windows. Bibliothèque? Synchrone/asynchrone? Threads?
- 13. Comment générer des images mipmap dans OpenGL ES?
- 14. Appels asynchrones avec AjaxPro
- 15. Utilisez des délégués asynchrones ou ThreadPool.QueueUserWorkItem pour un parallélisme massif?
- 16. Délégués multidiffusion asynchrones
- 17. Comment filtrer les requêtes asynchrones dans ProgressListener?
- 18. Comportement étrange d'OpenGL ES dans l'application iPhone
- 19. Configuration de glFrustumf dans OpenGL ES
- 20. transition Vue personnalisée dans OpenGL ES
- 21. Socket Connection dans iphone
- 22. OpenGL ES profondeur tampon
- 23. Recommandations de socket
- 24. Grand fond de défilement dans OpenGL ES
- 25. Zoom avant et arrière dans OpenGl ES
- 26. Configuration dynamique du client .NET via le socket
- 27. Débutants WCF Question - Services asynchrones consommables
- 28. Requêtes HTTP asynchrones en PHP
- 29. Les requêtes <image> sont-elles des requêtes asynchrones?
- 30. Dictionnaire Python pour stocker des objets socket
Avez-vous un lien vers cet article? –