目前项目在开发无限技能模块,遇到OOM,发现部分BlueprintGeneratedClass一直未被GC。经过分析得知:
一个蓝图Actor,在蓝图中定义了RPC函数,UNetDriver::AddReferencedObjects中会给RPC类型的UFunction添加引用,UFUNCTION的Outer是这个蓝图Class,会使这个蓝图Class无法被释放。相关源码如下。[Image Removed]
目前项目在开发无限技能模块,遇到OOM,发现部分BlueprintGeneratedClass一直未被GC。经过分析得知:
一个蓝图Actor,在蓝图中定义了RPC函数,UNetDriver::AddReferencedObjects中会给RPC类型的UFunction添加引用,UFUNCTION的Outer是这个蓝图Class,会使这个蓝图Class无法被释放。相关源码如下。[Image Removed]
重现步骤
hello,这个UFunction是什么时候添加到NetDriver中的?你能通过控制台命令行obj refs -name=ObjectName打印下引用链看下吗?或者补充一个简单的重现方式?
[Image Removed]
看起来你们把GA设为了Cluster,如果NetDriver的RepLayoutMap缓存了RPC的UFunction和对应的Outer Class(引擎会对参与网络复制的类和函数创建一个FRepLayout)我觉得可以理解,即使移除这个FunctionRepLayout,下次ProcessRemoteFunction调用这个RPC也还会再注册一遍