HttpMessageHandler 清理周期

Yea*_*iam 6 .net-core asp.net-core-webapi

在我的 .NET5 WebApi 应用程序中,我不断在日志中看到以下内容:

[2022-03-07 13:34:34 DBG] Ending HttpMessageHandler cleanup cycle after 0.0348ms - processed: 0 items - remaining: 2 items
[2022-03-07 13:34:44 DBG] Starting HttpMessageHandler cleanup cycle with 2 items
[2022-03-07 13:34:44 DBG] Ending HttpMessageHandler cleanup cycle after 0.0064ms - processed: 0 items - remaining: 2 items
[2022-03-07 13:34:54 DBG] Starting HttpMessageHandler cleanup cycle with 2 items
[2022-03-07 13:34:54 DBG] Ending HttpMessageHandler cleanup cycle after 0.0031ms - processed: 0 items - remaining: 2 items
[2022-03-07 13:35:04 DBG] Starting HttpMessageHandler cleanup cycle with 2 items
[2022-03-07 13:35:04 DBG] Ending HttpMessageHandler cleanup cycle after 0.0044ms - processed: 0 items - remaining: 2 items
[2022-03-07 13:35:14 DBG] Starting HttpMessageHandler cleanup cycle with 2 items
[2022-03-07 13:35:14 DBG] Ending HttpMessageHandler cleanup cycle after 0.0121ms - processed: 0 items - remaining: 2 items
[2022-03-07 13:35:24 DBG] Starting HttpMessageHandler cleanup cycle with 2 items
Run Code Online (Sandbox Code Playgroud)

这种情况持续发生,有时甚至无休无止。似乎这是一个清理周期,需要很长时间才能完成。谁能帮助我理解为什么会发生这种情况?以及如何解决?

Yea*_*iam 1

经过一番搜索,我发现它实际上是.net 的 Http 清理周期期间生成的日志。这实际上不是问题,而是一些有用的日志。

.NET 中的 HttpMessageHandler 类使用连接池来提高向同一终结点发出多个 HTTP 请求时的性能。当发出请求时,HttpMessageHandler 会创建一个新的 HttpClientHandler 和 HttpClient 实例,并将它们添加到连接池中。

请求完成后,HttpMessageHandler实例会将HttpClient和HttpClientHandler实例释放回连接池。此过程称为清理。

您可能会看到与清理周期相关的日志,因为某些日志记录框架会在清理过程中发生的对象被处置或最终确定时记录日志。这些日志对于调试或性能分析很有用,但它们也可能很嘈杂并且使您的日志变得混乱。

如果您看到过多的清理周期日志,则可能表明存在性能或资源使用问题。例如,如果您过于频繁地创建和处置 HttpMessageHandler 实例,则可能会给连接池带来不必要的压力并导致过多的清理周期。在这种情况下,您可能需要考虑重用 HttpMessageHandler 实例或优化您的使用模式以减少发出的请求数量。