【发布时间】:2021-09-28 08:46:34
【问题描述】:
我有一个执行 API 请求的类层次结构。在基类中,我构建了请求对象,在一些子类中,这个方法被覆盖了。
基类:
protected virtual HttpRequestMessage BuildRequest(HttpMethod method, Uri uri, HttpContent content = null)
{
HttpRequestMessage request = new HttpRequestMessage(method, uri);
if (null != content)
{
request.Content = content;
}
return request;
}
子类:
protected async override HttpRequestMessage BuildRequest(HttpMethod method, Uri uri, HttpContent content = null)
{
HttpRequestMessage request = await base.BuildRequest(method, uri, content);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AccessTokenHelper.GetAccessToken());
return request;
}
其他使用 BuildRequest() 方法的方法中的 then 语句:
using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);
如您所见,我是 using 返回的实例。这是否也会正确处理每个 BuildRequest() 方法中的 HttpRequestMessage 实例?或者这是在数万次请求后的经典内存泄漏情况?
【问题讨论】:
-
这里只有一个
HttpRequestMessage实例,在第一个BuildRequest中构造,所以是的,这个实例将被释放。所有变量都引用这个单一实例。 -
哇,感谢您的快速回复!我猜的差不多了,但我想在部署这段代码之前确定一下,因为我们之前遇到过不愉快的事情,
IDisposables 之前没有得到正确处理......