Raphael
|
239c874800
|
perf: 全面降低 CPU 占用与热路径分配,控制破坏性
主循环节流(SEnvir.cs):
- 主循环加条件 Sleep:处理快于 1ms 预算时 Thread.Sleep(1) 让出 CPU,处理慢时不 Sleep 保吞吐(空闲 CPU 100%→<10%)
- ActiveObjects 为空时直接 break,避免空集合在 1ms 时间片内空转
- 跨日 GC.Collect 由 Forced 改 Optimized,消除每日 STW 尖刺
保存与备份(SEnvir.cs):
- 无玩家且无持久化变更时跳过自动保存与备份:加 DataChanged 脏标志,WebApi 命令/支付处理/跨日公会重置后置标志,保存条件改为 (Players.Count>0 || DataChanged),保存后清标志
- DB Save 移后台线程:Session.Save(false) 从主线程移到后台 Thread,消除每 5 分钟主循环停顿;lambda catch 捕获异常并重置 Saving 标志,保证不死锁
- 异常 catch 的 File.AppendAllText 改为入队 ErrorLogs,由 WriteLogsLoop 异步落盘,避免主循环被磁盘 I/O 阻塞
热路径去 LINQ 与分配(PlayerObject/MonsterObject/MapObject.cs):
- PlayerObject.Process 的每 tick HashSet 改为复用字段 _tagClearList
- MonsterObject.ViewRange 的 PoisonList.Any 改为每 tick Process 中刷新的 _hasAbyssPoison 缓存
- MapObject.CanBeSeenBy 的 Buffs.Any(Cloak||Transparency) 改为 ProcessBuff 每 tick 刷新的 _hasCloakOrTransparency 缓存
- AddAllObjects 数据可见性遍历分区:仅 Player 与 Boss Monster 需全服遍历(组/公会/配偶/追踪跨地图),其他对象(普通怪/物品/魔法效果)只遍历同地图玩家,消除多数 AddAllObjects 调用的全服遍历
网络包分发与发送(Library/BaseConnection.cs,子模块):
- 反射 MethodInfo.Invoke + new object[]{p} 改为表达式树编译的强类型委托 Action<BaseConnection,Packet>,消除反射调用与每包数组分配
- 发送缓冲 List<byte>+AddRange+ToArray 三次拷贝改为 MemoryStream(8192)+Write+GetBuffer 零拷贝,BeginSend 签名改为 byte[]+length
存盘并发安全(Library/DBCollection.cs,子模块):
- SaveObjects 的 foreach(Binding) 改为索引遍历 + count 快照 + 越界保护,配合 DB Save 后台化避免主循环增删 Binding 时抛 InvalidOperationException
|
2026-09-10 13:58:46 +08:00 |
|
Raphael
|
0ea9199c44
|
perf: 降低主循环 CPU 占用并减少热路径分配
主循环与节流(SEnvir.cs):
- 主循环加条件 Sleep:处理快于 1ms 预算时 Thread.Sleep(1) 让出 CPU,处理慢时不 Sleep 保吞吐(空闲 CPU 100%→<10%)
- ActiveObjects 为空时直接 break,避免空集合在 1ms 时间片内空转
- 跨日 GC.Collect 由 Forced 改 Optimized,消除每日 STW 尖刺
- 无玩家且无持久化变更时跳过自动保存与备份:加 DataChanged 脏标志,WebApi 命令/支付处理/跨日公会重置后置标志,保存条件改为 (Players.Count>0 || DataChanged),保存后清标志(AutoClearUserDatas 清理幂等不置标志)
- 异常 catch 的 File.AppendAllText 改为入队 ErrorLogs,由 WriteLogsLoop 异步落盘,避免主循环被磁盘 I/O 阻塞
热路径去 LINQ 与分配(PlayerObject/MonsterObject/MapObject.cs):
- PlayerObject.Process 的每 tick HashSet 改为复用字段 _tagClearList
- MonsterObject.ViewRange 的 PoisonList.Any 改为每 tick Process 中刷新的 _hasAbyssPoison 缓存
- MapObject.CanBeSeenBy 的 Buffs.Any(Cloak||Transparency) 改为 ProcessBuff 每 tick 刷新的 _hasCloakOrTransparency 缓存
|
2026-09-09 20:15:47 +08:00 |
|
Raphael
|
258ca8ac3f
|
吸气魔吼不会影响身边一格范围内的怪物;优化UserItemStats常驻内存的问题;玩家或者宝宝被杀后会有系统提示凶手;秒影无踪在传送、喝药、施展增益型技能时不会失效;完善IP连接异常时的黑名单机制;增加配置控制大BOSS的暴击率;
|
2025-05-28 03:18:13 +08:00 |
|
Raphael
|
343e174a46
|
建立五级GM管理机制,重构权限
|
2025-04-25 16:53:07 +08:00 |
|
Raphael
|
2e083ee7fc
|
给账号添加身份标识;账号和角色分别增加在线时长统计;秒影无踪期间可以使用物品;
|
2025-04-25 10:26:25 +08:00 |
|
Raphael
|
d7008e6778
|
调整版本更新的环节时序,修复有时导致客户端无法进入登录页面的问题;增加多项GM命令;吸星大法不再需要选中位置就能释放;修复技能破盾时把自己的盾破了的问题;护身冰环的伤害会加上元素;吸气魔吼影响的怪物范围和数量受技能等级影响;优化破血狂杀的效果;优化铁布衫效果;道士的增益技能用在自己宝宝上效果翻倍;
|
2025-04-23 11:55:54 +08:00 |
|
Raphael
|
f419032e87
|
添加配置控制口哨召唤出来的怪物存活时间;法师风掌、小火球、霹雳掌、冰掌等级会对同系其它技能有加成效果;法师召唤怪会受自然魔力和诱惑之光所属元素影响,并继承自身一半的暴击属性;法师召唤怪限制5只;延长法师召唤怪的存活时长;
|
2025-03-20 10:29:56 +08:00 |
|
Raphael
|
6089b3f3f1
|
完善内存自动清理机制;召唤宝宝的名字颜色可配;增加登陆管理员账号连续错误时的设备黑名单机制;增加大量新地图、怪物。道士技能强化:释放治愈、召唤怪物、绿毒、神圣战甲、幽灵盾、猛虎、强震等技能时,自身的精神力和元素会大幅影响效果;
|
2025-01-29 13:30:59 +08:00 |
|
Raphael
|
553b27642d
|
优化GM命令,召唤失败时有提示
|
2024-12-27 21:04:08 +08:00 |
|
Raphael
|
3ab20c39b4
|
修复大补贴物品捡取显示功能问题;管理员区分超级管理员、正式管理员、临时管理员;内置超级管理员账号,创建同名账号时会自动设置为超级管理员权限;隐身玩家可被临时管理员和正式管理员看到;修复行会功能相关崩溃;修复伙伴不捡取物品的问题;增加大补帖挂机功能。
|
2024-11-02 17:24:12 +08:00 |
|
raphael
|
d6db0bfdb2
|
跨平台初版,修复了一些主线BUG,部分字符串做了汉化
武器精炼调整:普通、高级、稀有 的武器精炼上限递增
|
2024-08-07 15:11:07 +08:00 |
|