HttpClient static 与 new
HttpClient static with new
我已经阅读了很多这方面的内容,但仍然感到困惑。下面是我如何使用 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://docs.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();
}
}
这里的关键是您使用的是静态构造函数。所以这个对象只创建一次,而不是像你怀疑的那样每次创建 class 的实例时。
如果您想阅读更多有关静态构造函数的信息,可以在此处阅读:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
最好用HttpClientFactory instead of using static instance of HttpClient
directly. Singleton or static instance of HttpClient
doesn't respect DNS changes. More details is in this issue。
我已经阅读了很多这方面的内容,但仍然感到困惑。下面是我如何使用 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://docs.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();
}
}
这里的关键是您使用的是静态构造函数。所以这个对象只创建一次,而不是像你怀疑的那样每次创建 class 的实例时。
如果您想阅读更多有关静态构造函数的信息,可以在此处阅读:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors
最好用HttpClientFactory instead of using static instance of HttpClient
directly. Singleton or static instance of HttpClient
doesn't respect DNS changes. More details is in this issue。