You're not disposing of the response (or indeed the request stream, although that's a slightly different matter). That means you're leaving the connection to the server open until the finalizer happens to notice that the response can be finalized. The connections are pooled with (by default) two connections per URL. So your later requests are waiting for the earlier responses to be finalized before they can obtain a connection.
Better code:
// Is this definitely what you want? What about non-ASCII data?
byte[] binaryPostData = Encoding.ASCII.GetBytes(postData);
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(binaryPostData, 0, binaryPostData.Length);
}
using (var response = request.GetResponse())
{
// We don't care about the response, but we have to fetch it
// and dispose it.
}