IIRC と 2 つの主な違いは、SocketAsyncEventArgs
多くのオブジェクトを割り当てる必要がないことです (つまり、コールバックなど)。これは、スループットを考えると有効な懸念事項になる可能性があります。特に、これは GC による定期的なパフォーマンスの低下を防ぐのに役立ちます。追加の利点の 1 つは、「これは非同期で実行されるか、同期で実行される可能性があります。どちらかを説明します」というハイブリッドです。慣れるまで少し時間がかかりますが、非常に便利です。
ただし、すべてのものと同様に、高スループット システムは高スループットになるように設計する必要があります。あなたがゼロから始めているなら、私は使用しないSocketAsyncEventArgs
理由を見つけるのに苦労するでしょう. SE (50,000 以上の同時接続を処理する) 用の Web ソケット サーバーを作成したとき、特に有用なトリックの 1 つは、すべてのbyte[]
バッファーを確実にリサイクルすることでした。プールが空のときに新しいバッファーを割り当てます (また、当然の結果として、プールがいっぱいのときにのみバッファーをフロアにドロップします)。もちろん、そのシナリオでは、毎回すべてのクライアントと話しているわけではありません。定期的に行くなら各クライアントと話している場合、別のオプションとして、各接続にバッファーを固定することもできます。おそらくメモリのオーバーヘッドが増えますが、物事が簡単になるかもしれません。
「開発にも少し時間がかかります」に関しては; 特に、古い非同期モデルに精通している場合は特にそうです。一貫したパフォーマンスのサーバーを持つことがいかに重要であるかに帰着すると思います。もちろん、どちらの方法も厳密なテストが必要です。