【问题标题】:Performance improvement of of HttpResponseMessage client.SendAsync in c#c#中HttpResponseMessage client.SendAsync的性能提升
【发布时间】:2020-05-21 22:11:13
【问题描述】:

我有如下代码

public async Task<object> GetMethod()

    {

        object result = null;

     HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, "www.fo");                    

     HttpResponseMessage responseMessage = await client.SendAsync(requestMessage);

            if (ok)

            {
                dynamic data = JObject.Parse(responseMessage.Content.ReadAsStringAsync().Result);

                result = data.result.paameter1.tables.paamete2.row.ToString();
            }

      return result

     }

观察是client.SendAsync(requestMessage);花费太多时间,考虑到性能,还有其他更好的方法吗?

【问题讨论】:

  • 您的端点响应很慢吗?您如何确定问题是 client.sendasync?
  • " 花费了太多时间" 。相对于什么?
  • 另外,您不应该使用.Result。你的代码应该有:dynamic data = JObject.Parse(await responseMessage.Content.ReadAsStringAsync());
  • 在调试的同时也......它需要几秒钟才能继续......我想知道有没有其他方法可以实现它......?
  • i am not sure about endpoint response....but wait it too much 知道时间花在哪里很重要。去购物花费了我太多时间——但试图优化我在开车去商店之前步行到我的车的时间并没有成效。因为步行只占总时间的一小部分。

标签: c# asp.net-web-api2 asp.net-core-webapi


【解决方案1】:

这样会更好

private async Task<T> Post<T>(string url, object obj) where T : class
{
    var jsonString = _jsonHelper.SerializeObject(obj);
    var stringContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
    var response = await _httpClient.PostAsync(url, stringContent).ConfigureAwait(false);
    var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
    if(!response.IsSuccessStatusCode)
    {
        //throw
    }
    var responseObj = _jsonHelper.DeserializeObject<T>(responseString);
    return responseObj;
}

用法

public Task<SomeTypedObject> DoSomething(int someValue)
{
    var url = "someUrl";
    var requestObject= new ClassForRequest { proptery1 = someValue};
    return Post<SomeTypedObject>(url, requestObject);
}

你的主要问题是我没有在 ReadAsStringAsync 上使用 await,你是线程阻塞。 但我高度怀疑这不是您想要的“性能”的原因。

  • 呼叫在做什么?
  • 它返回了多少数据?
  • 端点有多远?/端点机器有多强大? / 那台机器的 ping 是什么?

PS,显示您的 HttpClient 生命周期,问题很可能在那里。

对您而言,是 1 个请求需要多长时间或每分钟执行 x 次的能力。

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多