gpt4 book ai didi

ios - React-Native + Redux + ImmutableJS 内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:21:30 24 4
gpt4 key购买 nike

我的 React-Native 应用程序出现奇怪的内存泄漏。这是一个不断增加的内存。我的状态被规范化,然后转换为不可变状态。有一个套接字处理程序可以更新状态中的现有对象。随着新消息更新状态,这会导致 RAM 缓慢增加。

状态:

const state = {
entities: {
2000: {
1: {
id: 1,
name: "I am normalized",
coordinates:[
{
lat: 0,
lng: 0
}
]
},
2: {
id: 2,
name: "me too",
coordinates:[
{
lat: 0,
lng: 0
}
]
}
},
1337: {
2: {
id: 2,
name: "me too",
coordinates:[
{
lat: 0,
lng: 0
}
]
},
3: {
id: 3,
name: "also normalized",
coordinates:[
{
lat: 0,
lng: 0
}
]
}
}
},
results: {
2000: [1,2],
1337: [2,3]
},
};

然后使用 fromJS() 进行转换到不可变状态。

我有一个套接字处理程序,它传递 action.payload到 reducer 。

action = {
payload: {
message_type: COORDINATES_UPDATE,
messages: [
{
id: 1,
coordinates: [
{
lat: 180,
lng: 180
}
]
},
{
id: 2,
coordinates: [
{
lat: 90,
lng: 90
}
]
}
]
}
}

reducer 处理传入的 action:

case SOCKET_MESSAGE: {
let newState = state;
if(action.payload.message_type == "COORDINATES_UPDATE") {
action.payload.messages.map((incoming_message) => {
let id = incoming_message.id;
let coordinates = incoming_message.coordinates;
newState.get("results").map((data, entities_id) => {
if(data.indexOf(id) > -1) {
newState = newState.setIn(["entities", entities_id, "" + id, "coordinates"], fromJS(coordinates));
}
})
})
return newState;
}
}

这会搜索 results Map()对于现有的 id ,如果它确实存在,它会更新实体对象。据我所知,这个逻辑没有问题,状态会正确更新并反射(reflect)在 render() 中。组件,尽管出于调试目的,我正在渲染一个空的 <View />作为我的整个应用程序,并且只更新状态。

然而每个setIn , 或 updateIn稍微增加 RAM,随着更新频率,我在几分钟内增加到 GB。

Steady RAM increase

相关包:

"react": "16.0.0",
"react-native": "0.50.3",
"immutable": "^3.8.2",
"normalizr": "^3.2.4",
"redux": "^3.7.2",

最佳答案

哦,这是一个巨大的;)您可能应该检查两件事:

0) 你有多少套接字连接?你可能有 5-10 个,所有的数据都是相乘的

1) 你使用 redux-dev-tool 吗?在您的情况下,它可能会消耗大量内存,请考虑停用生产/测试

关于ios - React-Native + Redux + ImmutableJS 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com