-
Notifications
You must be signed in to change notification settings - Fork 109
Open
Description
在GetStructPropertyImplementation的实现中,Property的访问与使用存在两个问题。以访问FMatrix中FPlane属性为例。
-
1 运行过程中,内存不能释放
FoundAddress为FMatrix Native侧的内存地址,基于该地址可以获取到各个FPlane属性Native侧的内存地址。
获取该FMatrix对象的FPlane对象GCHandle。如果是首次Get某个Property,则需要为该FPlane创建一个Mono对象。
该FPlane的Mono对象随后会被加入到HandleMap中,并且被设置成bPinned。
后续,FMatrix被GC时,只会Free释放FMatrix的GCHandle,不会Free释放成员属性的GCHandle。成员属性的GCHandle,只能在FCSharpEnviroment析构时,才能Free GCHandle。
因此,随着程序的运行,此类内存会持续增加。运行一段时间后,内存占用高,会存在OOM风险。
- 2 野指针访问风险
同上,FMatrix被GC时,也会释放FMatrix Native侧的内存地址。如果业务代码在C#层保存了其成员属性对象,那么再读写其成员属性对象,会访问野指针,导致程序异常退出。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels