1. 修改了Serein.Library中的ObjectPool工具类,提供了对象归还的默认处理方法(通过构造方法指定Action<T>委托)

2. 不再显式调用流程上下文的Reset()方法,而改为通过对象池调用
3. 同样的,对于同样使用了ObjectPool管理上下文的Serein.Proto.WebSocket项目而言,也进行了同2.一样的修改
This commit is contained in:
fengjiayi
2025-08-23 16:19:30 +08:00
parent 5656619a3b
commit 819320f355
8 changed files with 47 additions and 49 deletions

View File

@@ -40,14 +40,14 @@ namespace Serein.NodeFlow.Env
this.flowModelService = flowModelService;
this.UIContextOperation = UIContextOperation;
contexts = new ObjectPool<IFlowContext>(() => new FlowContext(flowEnvironment));
contexts = new ObjectPool<IFlowContext>(() => new FlowContext(flowEnvironment), context => context.Reset());
flowTaskOptions = new FlowWorkOptions
{
FlowIOC = IOC,
Environment = flowEnvironment, // 流程
FlowContextPool = contexts, // 上下文对象池
};
flowTaskManagementPool = new ObjectPool<FlowWorkManagement>(()=> new FlowWorkManagement(flowTaskOptions));
flowTaskManagementPool = new ObjectPool<FlowWorkManagement>(()=> new FlowWorkManagement(flowTaskOptions), fwm => fwm.Exit());
}
private ObjectPool<IFlowContext> contexts;
@@ -102,7 +102,6 @@ namespace Serein.NodeFlow.Env
{
flowWorkManagements.Remove(fwm);
}
fwm.Exit();
flowTaskManagementPool.Free(fwm);
}
@@ -257,7 +256,6 @@ namespace Serein.NodeFlow.Env
}
});
}
context.Reset();
flowContextPool.Free(context);
ReturnFWM(flowWorkManagement); // 释放流程任务管理器
if (flowResult.Value is TResult result)
@@ -330,7 +328,6 @@ namespace Serein.NodeFlow.Env
}
});
}
context.Reset();
flowContextPool.Free(context);
ReturnFWM(flowWorkManagement); // 释放流程任务管理器
}