HYEONWOO NAM
New member
Dear Opsive Team,
I am writing to you today regarding a performance issue we've encountered while developing our project using your excellent Behavior Designer asset. We have identified garbage allocations (GC.Alloc) at runtime, and after profiling, we've traced the source back to the Behavior Designer.
Specifically, the issue occurs when we use a BehaviorTreeReference task within another BehaviorTreeReference (a nested external behavior setup). Despite implementing your recommended pooling system, we've found that the initial call to EnableBehavior on the parent tree triggers BehaviorManager.LoadBehavior. This process, in turn, calls ExternalBehavior.CheckForSerialization and its deserialization methods, leading to substantial GC allocations.
We noticed this exact issue has been discussed in your forum previously, as seen in the following thread
https://www.opsive.com/forum/index.php?threads/performance-issue-when-loading-behaviour-tree.1104/
Given that this is a critical performance bottleneck for our project, we would like to inquire if there has been any progress on this matter or if you could provide us with further guidance on how to mitigate these allocations. Is there a recommended best practice for using nested external behaviors that we might be missing, or are there any known workarounds?
Your assistance on this matter would be greatly appreciated. Thank you in advanced for your time and support.
Best regards,
HYEONWOO NAM
NEOWIZ
I am writing to you today regarding a performance issue we've encountered while developing our project using your excellent Behavior Designer asset. We have identified garbage allocations (GC.Alloc) at runtime, and after profiling, we've traced the source back to the Behavior Designer.
Specifically, the issue occurs when we use a BehaviorTreeReference task within another BehaviorTreeReference (a nested external behavior setup). Despite implementing your recommended pooling system, we've found that the initial call to EnableBehavior on the parent tree triggers BehaviorManager.LoadBehavior. This process, in turn, calls ExternalBehavior.CheckForSerialization and its deserialization methods, leading to substantial GC allocations.
We noticed this exact issue has been discussed in your forum previously, as seen in the following thread
https://www.opsive.com/forum/index.php?threads/performance-issue-when-loading-behaviour-tree.1104/
Given that this is a critical performance bottleneck for our project, we would like to inquire if there has been any progress on this matter or if you could provide us with further guidance on how to mitigate these allocations. Is there a recommended best practice for using nested external behaviors that we might be missing, or are there any known workarounds?
Your assistance on this matter would be greatly appreciated. Thank you in advanced for your time and support.
Best regards,
HYEONWOO NAM
NEOWIZ