我如何得到合理的性能c# WebClient UploadString

本文关键字:性能 WebClient UploadString 何得 | 更新日期: 2023-09-27 18:14:15

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

以每秒10个请求的速度运行了大约15分钟后,每个帖子都要花很长时间才能完成。它可以在大约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毫秒)。

从SO的各种问题和一些博客文章中,我看到有人建议使用HttpWebRequest来代替能够控制请求的选项。

使用HttpWebRequest我已经尝试了这些事情没有工作:

  • 设置代理为空代理
  • 设置代理为null
  • 设置ServicePointManager。DefaultConnectionLimit为任意大的数。
  • 禁用KeepAlive(我不想,但它是建议的)。
  • 根本不打开响应流(有一些影响,但还不够)。

为什么请求需要这么长时间?如有任何帮助,不胜感激。

我如何得到合理的性能c# WebClient UploadString

原来是程序的另一部分,它占用了所有可用的连接。例如,我没有套接字,必须等待一个可用的

我发现通过监控ASP.NET Applications'Requests/Sec在性能监视器