我们的应用,一个请求在任意一个分区创建一个actor,处理一个请求在actor执行过程中内存增加200MB-250MB,执行完成后我删除了actor
Task.Run(() =>
{
actorObject.ExecuteGrainAsync(requestId, jsonModel).ContinueWith(async (t) =>
{
await GrainFactory.DeleteActor(actorObject.GetActorId(), "Workflow", CancellationToken.None);
});
});
IActorService myActorServiceProxy = ActorServiceProxy.Create(
new Uri($"fabric:/APPSeConnect.WebAgent/{actorName}"), actorId);
await myActorServiceProxy.DeleteActorAsync(actorId, cancellationToken);
分区中没有活动的参与者,我们可以通过查询结构来检查,但内存仍然被阻塞了很多分钟(5 分钟 - 超过 50 分钟)。后来的 exe 内存大小只减少了几 MB。
根据这个文档内存应该由运行时在理想超时中声明。我的设置是
new ActorGarbageCollectionSettings(10, 2)
我也在使用这个属性
[StatePersistence(StatePersistence.None)]
在演员的并行处理期间,它的影响是巨大的。