最近开发一个机器人程序,其主要功能是模拟玩家在地图上跑动用来测试地图压力。主要功能代码如下:
loop(State) ->
#state{robot_state = RobotState} = State,
case RobotState of
born ->
NewState = robot_born(State),
NextRobotState = get_next_robot_state(),
erlang:send_after(random:uniform(3000), self(), loop),
NewState#state{robot_state = NextRobotState};
move ->
robot_move(State),
State;
move_to_npc ->
robot_move_to_npc(State),
State;
_ ->
todo
end.
robot_move_to_npc(State) ->
#state{robot_player_id = RobotPlayerID, send_socket = _SendSocket} = State,
{CurMapDataID, CX, CY} = get_cur_robot_pos(State),
{TX, TY} = get_a_npc_point(CurMapDataID, CX, CY),
PathList = aStar:find_path(CurMapDataID, CX div 100, CY div 100, TX, TY),
case PathList of
[] ->
erlang:send_after(5000, self(), loop);
PathList ->
PosInfoList = [#pk_PosInfo{x = X * 10

在开发一个模拟地图跑动的机器人程序时,发现单个Erlang进程占用内存高达40MB,经过逐步调试,排除了代码问题。通过手动GC内存降至16MB,揭示出执行结果可能导致内存开销。了解到Erlang进程会为执行结果分配内存,变量仅存储内存指针。优化建议包括合理使用`erlang:garbage_collect`,但需考虑性能影响。测试数据显示不同操作后的内存占用变化。
最低0.47元/天 解锁文章
207

被折叠的 条评论
为什么被折叠?



