C#,大量数据的上传至服务器并处理返回信息,如何优化速度

是C#winform程序, 大约几万到几十万条数据的上传至服务器处理,是一条一条传送,速度比较慢,1万条数据上传+返回结果就要14分钟。问如何提升速度。
注:已经开了4个线程,但是4个线程和2个的处理速度相差不大,非常奇怪···
而且服务器布置在本地时,速度要比在云端时快,这是为什么?
代码如下:

最后还是提升了了线程数量,从4个提升到6个速度有提升,提升到8个速度下降,提升到10个速度有提升,表示不解。
但是处理速度勉强达到要求了。

//向服务器传送json

public void Post_js(string name, string d, int num)
{
//string filterExpression = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);

request.Method = "POST";
request.ContentType = "application/json";
//request.ContentType = "application/x-www-form-urlencoded";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(d);
request.ContentLength = bytes.Length;
request.GetRequestStream().Write(bytes, 0, bytes.Length);

        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();//接受服务器传回的结果
        }
        catch (WebException ex)
        {
            response = ex.Response as HttpWebResponse;

        }
        try
        {
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                //DataRow[] rowArray;
                List<string[]> lsout = new List<string[]>();//尝试作为输出的list数据汇总
                string log_all;//输出的日志汇总
                json = reader.ReadToEnd();//json字符串化
                JObject obj2 = JObject.Parse(json);
                //取出json中的一个个对象的值
                dOut.CASE_ID = obj2.Property("CASE_ID").Value.ToString();
                dOut.error = obj2.Property("error").Value.ToString();
                dOut.log = obj2.Property("log").Value.ToString();

                log_all ="第"+ (num+1).ToString() +"个"+ "\r\n"+"CASE_ID:" + dOut.CASE_ID + "\r\n" + dOut.log + "\r\n";
                WriteTxt("log" + name + ".txt", log_all);//输出日志文件
                writeToExcel(name);//输出csv

            }
        }
        catch
        {
            string log_all,ex="";//输出的日志汇总

            if (response.GetResponseStream() == null)
            {
                //MessageBox.Show("网络异常");
                ex = "网络异常";
            }
            else
            {
                //MessageBox.Show("分组器返回值异常");
                ex = "返回值异常"+json ;

            }
            waitornot = true;

            log_all = "第" + (num + 1).ToString() + "个" + "\r\n" + "EX:" + ex + "\r\n";
            WriteTxt("log" + name + ".txt", log_all);//输出日志文件

        }
    }

因为你的数据是一条条上传的,那么影响速度的瓶颈就应该在传输速度上面,所以你服务器布置在本地时,速度自然要比在云端时快
建议改为批量上传,根据服务端的处理速度设置一批多少条数据