我直接用acedb默认的读取和写入功能,没做深拷贝。所以因为复制的数据没写入这个问题基本可以排除。
没在函数外面读取数据,有可能清理代码的是两个地方:1、定期分析数据后清除不再关注的玩家数据;2、点击选项的重置数据库按钮。这两个地方我都深度测试了,不像是这里的问题。
我感觉有两种可能性:1、WoW或者acedb在reload和小退时因为诸如文件句柄没合理关闭等原因没有将缓存的数据保存到数据库;2、玩家退出后使用别的战网账号登录,当然读不到别的账号的数据了。
关于处理数据库的主要流程:
1、AcamarMessage模块侦听聊天事件
2、新消息到达后,FilterProcessor的OnNewMessage处理消息数据
2.1、通过PreLearning如果玩家没达到消息发送频率阈值,则忽略
2.1、如果玩家发送消息较多,则通过LearnMessage函数将玩家的各种写入数据库
3、每隔analysis.interval时长对保存的数据进行分析,算出得分,函数在timer_analysis_func,并且进行数据库的优化,函数是timer_compactdb_func