Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

官方demo内存无法回收 #361

Open
jeepc opened this issue Jul 4, 2019 · 12 comments
Open

官方demo内存无法回收 #361

jeepc opened this issue Jul 4, 2019 · 12 comments

Comments

@jeepc
Copy link

jeepc commented Jul 4, 2019

如图
屏幕快照 2019-07-04 下午7 05 37

@jeepc
Copy link
Author

jeepc commented Jul 4, 2019

请问一下有没有解决方案

@hzgotb
Copy link
Collaborator

hzgotb commented Jul 4, 2019

请问是关闭掉app吗?

@jeepc
Copy link
Author

jeepc commented Jul 4, 2019

不是,我把数据加到10000个,然后一直滑动

@zjuwjf
Copy link
Contributor

zjuwjf commented Jul 7, 2019

可以做一个使用和不使用fish-redux的内存对比么?

@jeepc
Copy link
Author

jeepc commented Jul 15, 2019

demo地址:https://github.com/jeepc/fish-redux
以下分别为不使用fish-redux adapter和使用adapter的情况:
(切换两个情况的代码)
屏幕快照 2019-07-15 下午6 17 01
1、不使用fish-redux adapter:
屏幕快照 2019-07-15 下午6 22 52

2、使用adapter:
屏幕快照 2019-07-15 下午6 24 25

不知道是不是我测试方法的问题,还是adapter本身就存在问题

@jeepc
Copy link
Author

jeepc commented Jul 15, 2019

@zjuwjf

@zjuwjf
Copy link
Contributor

zjuwjf commented Jul 19, 2019

看了下,比较并不是很合理,去掉一些额外的差异,比较下?比如展示上的差异,数据上的差异等。

@jeepc
Copy link
Author

jeepc commented Jul 19, 2019

1、展示上、数据上差异极小;2、使用adapter时,内存明显是不正常的,滚动过程中应该有上下波动,最后稳定下来,内存应该有回落

@flutterbest
Copy link

解决了吗

@kaina404
Copy link

Goof

@zjuwjf
Copy link
Contributor

zjuwjf commented Nov 10, 2019

我用当前的example 做了测试

将上面的getItem函数,同等为

import 'todo_component/view.dart' as todoView;
Widget getItem(Dispatch dispatch, ViewService viewService) {
  return todoView.buildView(ToDoState(), dispatch, viewService);
}

不使用Adapter
image

使用最新 SourceFlowAdapter
image

使用DynamicFlowAdapter(回退到0.2.8版本)

void _init(Action action, Context<PageState> ctx) {
  final List<ToDoState> initToDos = <ToDoState>[];

  for(int i=0; i< 10000; i++) {
    initToDos.add(ToDoState());
  }
...
}

image

放一起
image

结论是,使用Adapter不会降低性能。在一些复杂的场景下,可以用来优化性能。

@zjuwjf
Copy link
Contributor

zjuwjf commented Nov 10, 2019

DynamicFlowAdapter 会产生数组,但是一般也不会占用特别多的内存。
image

目前会建议使用SourceFlowAdapter,是DynamicFlowAdapter 的替代者。

1、减少列表转换。
2、使用简化。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants