UE5里面为什么package被加载后文件句柄会持续占用
目前是发现createpackage没有创建文件句柄所以没错,用loadpackage后文件句柄稳定占用
如果是有意图这样做,目的是什么
UE5里面为什么package被加载后文件句柄会持续占用
目前是发现createpackage没有创建文件句柄所以没错,用loadpackage后文件句柄稳定占用
如果是有意图这样做,目的是什么
Hi,
我的理解是因为一个UPackage内部可以不止只有一个需要加载的Object,所以有可能需要读取多次,所以句柄会伴随着UPackage,等UPackage没有被引用后,可以随着一起释放。
还有一种可能是loadpackage的时候被FLinkerLoad持有,某些时候资源的bulk data不会全部读取到内存在后面需要时读取,这样避免频繁打开关闭文件开销,所以并没有释放,引擎里有UnloadPackage方法,调用一下应该就能释放掉了
那就是说专门这样设计的? 后续不准备改掉? unloadpackage情况必须要提前知道这个资产被冲突了吧…也行吧..用packagetracker追下全卸载了…。
是的,一般来说卸载需要检查此时是否被其他地方引用,可以通过追踪引用链或者控制台obj list class=Package或obj refs <ObjectName>来分析,如果没有被引用才能被GC或卸载成功
他这个追踪引用链处理用Assetregsitrystate的方式还有其他追踪的方法莫?
不清楚要在什么情况下去用,一般来说AssetManager.DumpReferencersForPackage这种接口能应对大部分情况,虽然里面也是通过Assetregsitry去拿
好,感谢
好的,有问题我们再交流~