bre*_*ett 5 .net c# asp.net asp.net-mvc-4 asp.net-web-api
我读过很多这方面的内容,但仍然很困惑。下面是我如何使用 HttpClient 以便可以重用它:
private static HttpClient client;
    public ClientClass()
    {
        client = new HttpClient();
    }
我不明白的是,即使它是静态的,我仍然在每个控制器调用上创建一个新实例。只有当我在同一方法中进行多次 HttpClient 调用时,它才会被重用,但除此之外,它总是会为每个 Web 请求创建一个新实例。
是否应该通过多个 Web 请求重用一个 HttpClient 实例,如果是这样,我该怎么做,因为我这样做的方式会在每个 api 调用上创建一个新实例?
另外,如果我这样做有什么区别:
private static HttpClient client = new HttpClient();
public ClientClass() {}
我不完全确定您在哪里阅读到了当前的实现,特别是因为您说多个来源给了您这个想法。
我的假设是,您误读了这些来源,认为它们向您展示了一个普通的构造函数,而不是静态的构造函数?
正如 Jawad 指出的那样,您每次都会创建一个新实例,这完全违背了静态变量的目的。
正如 MSDN 上所述。https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.8
class ClientClass 
{
    private static readonly HttpClient client;
    static ClientClass() 
    {
        client = new HttpClient();
    }
}
这里的关键是您使用的是静态构造函数。因此,该对象仅创建一次,而不是像您怀疑的那样每次创建该类的实例时都会创建。
如果您想了解有关静态构造函数的更多信息,可以在这里进行: https: //learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
| 归档时间: | 
 | 
| 查看次数: | 17899 次 | 
| 最近记录: |