It is good that during one socket each start / end operation will allocate a new synchronization object.
For example, your logic:
// GET /default.aspx HTTP/1.1<cr-lf> ReadLine for Http Verb and Version // Headers ReadLine till you get empty line and process header // Data Read or process mime data
Now, if you notice, we will never read everything in one start / end call, instead, each operation calls several begin / end, which will create a new synchronization object.
But all these steps are for only one client / server interaction.
Thus, your request / response object will be only one throughout the life of the socket, in which case you better use the new Async method and leave the request / response object as only one object.
When the server processes 1000 requests at the same time, it will certainly affect performance. Even if the sync object accepts 100 bytes, but the distribution / redistribution, the use of the gc processor will all affect 1000 simultaneous operations.
However, there are well-developed algorithms for memory management, if your server runs continuously for a long time, this will certainly cause fragmentation and slow down the work.
source share