0

我一直在研究 .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 SOFTWAREHttpClientHandler/HttpClient Memory Leak

但是,我不确定如何从 WebAPI 本身中设置 HttpClient 的共享“单个”实例?

4

1 回答 1

0

你应该看看如何实现单例模式。参考这个

然后,您可以创建一个单例HttpClient并使其负责HTTP来自您的 API 的所有调用。

于 2017-10-04T05:45:39.790 回答