- 打卡等级:本地老炮
- 打卡总天数:584
- 打卡月天数:7
- 打卡总奖励:4913
- 最近打卡:2026-11-14 00:18:30
梦歌管理员
- 积分
- 905783
|
梦歌洛奇内存优化报告
一、防闪退(八道保险)
游戏喊"我出致命错误、自己关掉吧"时,先把这个信号拦下来,别让它真退游戏,同时把原因记进日志。
切角色/小退回来的时候对象已经没了,代码还在用 → 加保险,碰到就跳过那一步。
输入法切换时对象是空的 → 加保险。
查表没查到(返回空)之后代码还继续往下用 → 两处都加了保险。
某类取字段的函数被拿空对象调用 → 加保险。
某个技能(那个连发炮)相关的致命判断 → 加了拦截。
这次新加的一条:对象早就废了、那块地址已经被别的数据占了,代码还在读它 —— 就是今天这个崩溃。碰到就当成"里面没东西"返回,不崩,并且把是谁调用的记进日志(这就是我之前说的"抓真凶"的线索)。
出现"一崩就崩在同一个地方"的死循环,会专门盯住它。
二、防卡死 + 处理"内存不足弹窗"
内存不够时游戏自己弹的错误框:自动关掉,不打断玩家。
改成"在游戏里问玩家一次"(整局只问一遍),不再一声不响就退。
画面卡住但程序还活着(假死):能认出来 —— 现在是只记日志、不自动关(这是我按你要求改的开关)。
卡住不动超过 12 秒:看门狗会判定(秒数可调)。
三、管内存(因为客户端是 32 位,最多只能用 4GB)
记账:随时知道内存花在哪了 —— 哪一块最大、地址空间碎不碎。
快满了分三步自救:① 提醒玩家切地图 → ② 自动释放占着不用的内存 → ③ 实在不行才干净退出(这最后一步现在也改成只记日志了)。
释放纹理、但保住常用内存,避免"放完反而更卡"。
回收"占着地址却永远不用"的空间。
切地图后内存莫名涨高:判定可疑,清掉。
把零散的地址空间归拢,给游戏留出大块连续空间(避免"总内存还有、却凑不出一块大的"导致分配失败)。
显存只做只读记账,不动纹理 —— 因为早先动它会灰屏。
还有几项比较激进的(挂到系统内存分配接口上、启动先预留一大块地址),默认是关的;你现在这份配置里手动开了一部分,灰度前建议确认要不要先关掉。
以上功能部分已经实装到正式服,(已全部推送更新正式服)
|
|