如何从 C# WebClient UploadString 获得合理的性能

How do I get reasonable performance out of C# WebClient UploadString

我有一个 Windows 服务,它使用 WebClient 将 json 数据发送到 MVC5 WebAPI。 Windows 服务和 WebClient 目前都在同一台机器上。

在它 运行 大约 15 分钟后,每个请求每秒大约 10 个 post 需要不合理的长时间才能完成。它可以从大约 3 毫秒开始完成一个请求,然后建立起来大约需要 5 秒,这对我的应用程序来说太多了。

这是我正在使用的代码:

private WebClient GetClient()
{
var webClient = new WebClient();

webClient.Headers.Add("Content-Type", "application/json");
    return webClient;
}

public string Post<T>(string url, T data)
{
    var sw = new Stopwatch();
    try
    {
        var json = JsonConvert.SerializeObject(data);
        sw.Start();
        var result = GetClient().UploadString(GetAddress(url), json);
        sw.Stop();

        if (Log.IsVerboseEnabled())
            Log.Verbose(String.Format("json: {0}, time(ms): {1}", json, sw.ElapsedMilliseconds));

        return result;
    }
    catch (Exception)
    {
        sw.Stop();
        Log.Debug(String.Format("Failed to send to webapi, time(ms): {0}", sw.ElapsedMilliseconds));

        return "Failed to send to webapi";
    }
}

请求的结果对我来说并不重要。

序列化数据大小从几个字节到大约 1 kB 不等,但这似乎不会影响完成请求所需的时间。

收到请求的 api 控制器几乎立即完成执行(0-1 毫秒)。

从这里的各种问题和一些博客 posts 我看到有人建议使用 HttpWebRequest 而不是能够控制请求的选项。

使用 HttpWebRequest 我已经尝试了这些没有用的东西:

为什么请求需要这么长时间?非常感谢任何帮助。

原来是程序的另一部分占用了所有可用的连接。 IE。我没有插座了,不得不等待免费的。

我通过在性能监视器中监视 ASP.NET Applications\Requests/Sec 发现的。