Sync Vs. Async Sockets Performance in .NET

前端 未结 3 1157
轻奢々
轻奢々 2020-12-17 17:59

Everything that I read about sockets in .NET says that the asynchronous pattern gives better performance (especially with the new SocketAsyncEventArgs which saves on the all

相关标签:
3条回答
  • 2020-12-17 18:27

    The slowest part of your application will be the network communication. It's highly likely that you will make almost no difference to performance for a one thread, one connection client by tweaking things like this. The network communication itself will dwarf all other contributions to processing or context switching time.

    Say that I get N callbacks at almost the same time on N different threadpool threads notifying me that there's new data.

    Why is that going to happen? If you have one socket, you Begin an operation on it to receive data, and you get exactly one callback when it's done. You then decide whether to do another operation. It sounds like you're overcomplicating it, though maybe I'm oversimplifying it with regard to what you're trying to do.

    In summary, I'd say: pick the simplest programming model that gets you what you want; considering choices available in your scenario, they would be unlikely to make any noticeable difference to performance whichever one you go with. With the blocking model, you're "wasting" a thread that could be doing some real work, but hey... maybe you don't have any real work for it to do.

    0 讨论(0)
  • 2020-12-17 18:31

    "This class was specifically designed for network server applications that require high performance."

    As I understand, you are a client here, having only a single connection.
    Data on this connection arrives in order, consumed by a single thread.

    You will probably loose performance if you instead receive small amounts on separate threads, just so that you can assemble them later in a serialized - and thus like single-threaded - manner.
    Much Ado about Nothing.


    You do not really need to speed this up, you probably cannot.

    What you can do, however is to dispatch work units to other threads after you receive them. You do not need SocketAsyncEventArgs for this. This might speed things up.

    As always, measure & measure.
    Also, just because you can, it does not mean you should.
    If the performance is enough for the foreseeable future, why complicate matters?

    0 讨论(0)
  • 2020-12-17 18:48

    The number one rule of performance is only try to improve it when you have to.

    I see you mention standards but never mention problems, if you are not having any, then you don't need to worry what the standards say.

    0 讨论(0)
提交回复
热议问题