It seems that setting the correct buffer size is a big deal while using the httplistener. I changed your sample code a bit to test different buffer sizes (
). This is what I found while running the server in our test environment behind a firewall with 100Mbps throughput:
Buffer size: 4 Kb. 1 Mb in 51 690 ms (20 Kbps)
Buffer size: 8 Kb. 1 Mb in 195 ms (5 377 Kbps)
Buffer size: 16 Kb. 1 Mb in 143 ms (7 333 Kbps)
Buffer size: 32 Kb. 1 Mb in 6 578 ms (159 Kbps)
Buffer size: 64 Kb. 1 Mb in 3 290 ms (319 Kbps)
Buffer size: 128 Kb. 1 Mb in 103 ms (10 180 Kbps)
Buffer size: 256 Kb. 1 Mb in 103 ms (10 180 Kbps)
Buffer size: 512 Kb. 1 Mb in 98 ms (10 700 Kbps)
Buffer size: 1024 Kb. 1 Mb in 307 ms (3 416 Kbps)
I ran this test several times but the numbers are pretty consistent. In my specific case, the worst buffer sizes are 4, 32, 64, they slow down the server to a crawl! The best buffer size in my case would probably be 128Kb.
I also ran it on another computer in the same network (1Gbps):
Buffer size: 4 Kb. 1 Mb in 42 ms (24 966 Kbps)
Buffer size: 8 Kb. 1 Mb in 23 ms (45 590 Kbps)
Buffer size: 16 Kb. 1 Mb in 13 ms (80 660 Kbps)
Buffer size: 32 Kb. 1 Mb in 10 ms (104 858 Kbps)
Buffer size: 64 Kb. 1 Mb in 7 ms (149 797 Kbps)
Buffer size: 128 Kb. 1 Mb in 6 ms (174 763 Kbps)
Buffer size: 256 Kb. 1 Mb in 8 ms (131 072 Kbps)
Buffer size: 512 Kb. 1 Mb in 8 ms (131 072 Kbps)
Buffer size: 512 Kb. 1 Mb in 7 ms (149 797 Kbps)
Buffer size: 1024 Kb. 1 Mb in 8 ms (131 072 Kbps)
Much more consistent. However, anything below 64Kb should not be used I think.
It would be interesting to see what anyone else could find.