Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重构dump方法,解决dump在单帧内执行造成的卡顿问题。 #132

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

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