【发布时间】:2017-10-04 00:45:01
【问题描述】:
我一直在从事 .NET 4.6.1 Web API 项目。作为该项目的一部分,我需要调用另一个 Web API,并且我想使用 HttpClient 来执行此操作。
根据我的在线研究,您不能仅仅依靠在 using 子句中执行普通的 HttpClient,因为它不能正确地进行垃圾收集并且可能导致内存泄漏。
例如,我目前使用如下:
using (HttpClient client = new HttpClient { Timeout = TimeSpan.FromSeconds(CONTENTFUL_TIMEOUT_IN_SECONDS) } )
{
responseText = await client.GetStringAsync(uri).ConfigureAwait(continueOnCapturedContext:false);
}
但正如 Stack Overflow 和其他人的其他文章中所建议的那样,这会导致内存泄漏,解决此问题的方法是共享 HttpClient 的单个实例。 例如,检查HTTPCLIENT DESTABILIZING YOUR SOFTWARE 和HttpClientHandler/HttpClient Memory Leak。
但我不确定如何从 WebAPI 本身中设置 HttpClient 的共享“单一”实例?
【问题讨论】:
标签: asp.net-web-api httpclient dotnet-httpclient webapi