0

如果我有范围服务:

services.AddSingleton<MyScopedService>();

在该服务中,发出一个 HTTP 请求:

HttpClient client = _clientFactory.CreateClient();
StringContent formData = ...;
HttpResponseMessage response = await client.PostAsync(uri, formData);
string data = await response.Content.ReadAsStringAsync();

在这里读到,对于AddScoped服务,服务范围是 SignalR 连接。

如果用户在返回之前关闭浏览器选项卡response,MyScopedService 代码仍会完成。

有人可以解释那个 MyScopedService 实例会发生什么吗?什么时候被认为超出范围?代码完成后?垃圾收集的时间是否可预测?

我有一个使用范围依赖注入(fluxor和 CircuitHandler)的 Blazor 服务器项目,我注意到应用程序总内存随着每个新连接而增加(显然),但需要一段时间(分钟)才能获得内存关闭浏览器选项卡后关闭。

只是想知道这是否是预期的,或者我是否可以做一些事情让内存使用恢复得更快。或者,我的范围服务可能有问题。

4

1 回答 1

0

添加IDisposeAsync到您的服务,然后在您的服务中:

public async ValueTask DisposeAsync() => await hubConnection.DisposeAsync();

这是从我自己的一个图书馆复制的,我面临同样的问题。如果有对其他对象的引用,GC 将不起作用...

于 2021-01-08T04:35:31.463 回答