I didn't spend too much time on this example optimizing for performance(Mostly just making sure it's readable and easy to understand) other than making sure it was close to the maximum, realistically you should always send the largest amount thats possible given your memory constraints. As I understand the web request object it will use TCP/IP and the MTU (Maximum Transmission Unit?) size to determine the packet sizes on the outbound socket so as long as you are sending pieces that are that big or more then it should optimize itself. Depending on the application 8K to 64k has worked well for my buffer sizes but each implementation can be slightly different.
If you want to have the stream handle its own buffer sizes you can get rid of the responseStream.flush() call so it will build up an internal buffer before sending whatever it thinks is appropriate since it will flush when its "Full". I'm not sure what that amount is though a bit of reading up on the C# http stream buffer would be in order I think.
Please let us know the results of your testing its always good to have more than one eye on performance and optimization of code.
Regards,
Barry R.