Skip to content

Conversation

@jinghaifeng1
Copy link

@jinghaifeng1 jinghaifeng1 commented Jul 9, 2024

问题描述

  • 当节点树结构非常庞大时,执行dump操作会导致游戏出现明显的卡顿现象,因为dump操作在单帧内完成。

解决思路

  • 重构dump方法:通过协程的方式对dump进行重构,使得遍历和获取节点的操作分散在多帧中执行。
  • 分帧执行:每帧只处理一部分节点树的遍历,如果当前帧的时间已用完,则暂停执行,将剩余操作推迟到下一帧继续。

实验效果

  • 在测试工程中,构造了一个包含大量节点的复杂节点树,dump操作生成的字符串长度达到100万。
  • 经过优化,即使面对如此庞大的节点树,dump操作也不会导致游戏卡顿。

技术细节

  • 通过协程的使用,有效分散了计算负载,避免了单帧内处理大量数据造成的性能瓶颈。
  • 原AbstractDumper的dumpHierarchyImpl方法是递归方法,存在爆栈的风险,现在的协程dump方法将递归重构为了循环迭代,避免了该风险。

- 当节点树结构非常庞大时,执行`dump`操作会导致游戏出现明显的卡顿现象,因为`dump`操作在单帧内完成。

### 解决思路
- **重构`dump`方法**:通过协程的方式对`dump`进行重构,使得遍历和获取节点的操作分散在多帧中执行。
- **分帧执行**:每帧只处理一部分节点树的遍历,如果当前帧的时间已用完,则暂停执行,将剩余操作推迟到下一帧继续。

### 实验效果
- 在测试工程中,构造了一个包含大量节点的复杂节点树,`dump`操作生成的字符串长度达到100万。
- 经过优化,即使面对如此庞大的节点树,`dump`操作也不会导致游戏卡顿。

### 技术细节
- 通过协程的使用,有效分散了计算负载,避免了单帧内处理大量数据造成的性能瓶颈。
- 原AbstractDumper的dumpHierarchyImpl方法是递归方法,存在爆栈的风险,现在的协程dump方法将递归重构为了循环迭代,避免了该风险。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant