Ich arbeite an einem Dienst, der bis zu 30.000 Remote-Geräte verwaltet.Warum sollte ich BeginWrite anstelle von Write verwenden?
Bei einigen Belastungstests scheint es, als ob die asynchrone Methode BeginWrite mehr Ressourcen als reguläres Write verwendet (ich denke aufgrund des Overheads, der benötigt wird, um einen Callback-Thread zu erstellen); Auf der anderen Seite gibt die Write-Methode immer schneller als BeginWrite zurück.
Also meine Frage ist: Was ist der Grund, BeginWrite zu bevorzugen?
Eine andere Frage ist: Gibt es einen Grund, ein WriteTimeout für Sync Write zu setzen? In welchen Fällen erzeugt die Write-Methode keine sofortige Ausnahme (z. B. aufgrund eines geschlossenen Sockets), wird aber nicht in angemessener Zeit abgeschlossen?
EDIT: Ich habe eine Reihe von Worker-Threads (32 oder 64), so dass ich Daten an 500-1000 Geräte auf einmal senden und scheint scheint besser als BeginWrite zu arbeiten.
EDIT 2: Nach ein wenig Suche verstehe ich, dass Sync Write nur hängt, wenn der Schreibpuffer voll ist. Die Standardschreibpuffergröße beträgt 8 KB, und ich sende 1-2 KB Daten auf einmal, daher sollte Write in meiner Anwendung niemals hängen bleiben und es ist besser, dass BeginWrite. Ich habe eine Sicherheit WriteTimeout von 1 Sekunde eingestellt.
Senden Sie Daten gleichzeitig an alle Remote-Geräte? Können Sie uns den Code Ihres Tests zeigen? –
Ich sende Daten an 500-1000 Geräte auf einmal. – ElmoDev001
Es ist ein sehr, sehr großes Projekt, also Code zu zeigen, ist nicht einfach. – ElmoDev001