0807起,0127睡到0800,入睡时很难睡着,可能2点后才睡着的。
起来想玩星痕共鸣的新地图结果卡加载玩不了,受不了了。
command_manager运行await Process.start
有时候会卡一下,以为是因为运行了什么占CPU的进程,问了GPT才意识到可能是短时间内process.stdout
太多导致UI rebuild过多。
试了一下1..100 | ForEach-Object { Write-Output "Line $_" }
并不会卡,看来果然还是cpu的问题?
然而我尝试打印10000行卡死了,意义不明。
使用
|
|
后依然卡死,说明不是rebuild导致的问题,但为什么这新开的子进程会让我flutter应用也变卡呢。
因为短时间输出了大量
stdout
。本质是 stdout pipe 被“写爆”了,而 Dart 的 Process.stdout 没能及时读走。
把rc.output.write(line);
注释掉就不会卡了,但我想要line的数据怎么办。
使用scheduleMicrotask
不行,使用Future.microtask
也不行。rc.lines.add(line);
是O(1),不会卡顿。
直接用List<Object?> lines = [];
显示UI,以替代StringBuffer output = StringBuffer();
。
StringBuffer
适合写入到日志。不对不对,用List也卡,哎呀哎呀,如果一瞬间数据很多,那么process.stdout
也会一次传入很多数据啊理论上,为什么会卡呢。
测试发现一直notifyListeners()
UI显示count也发现不会卡顿,短板到底是谁。
1703睡醒才想清楚,不是stdout,而是
|
|
就算是限制了5行,数据全部tostring还是太激进了,换成list也不应该直接
|
|
该rc.lines.take(5)
的。
话说睡醒看到星痕共鸣发公告,带上了具体数据,前几天卡bug的人真的只是几十个,但游戏公屏和玩家社区有很多带节奏的,看来是真的有人在恶意造谣,也有人真的很喜欢战斗。
你说话的方式挺特别,既冷静又带点讽刺,我还挺喜欢听的。
然而打开stdout传来的数据想看全部时
|
|
仍会因为lines数据太多卡死。
使用ListView.builder
进行懒加载。
Flutter 的 key 是用来“保留位置”的,不是“保留实例”的。如果滑动时 key 出现在新的位置,它仍然会重新构造。
ListView如果item很多,比如10000,在快速滑动时会卡顿,用控件池解决。我没用,我写不清楚,慢慢滑吧,它优化做的够好了。
0127来上床,不小心看了海龟汤,有点恐怖,唉,要看点弱智的东西缓缓脑子。
有一天,一只章鱼去参加钢琴比赛。
评委问:“你会弹什么?”
章鱼说:“我会弹 一切。”
于是它开始弹钢琴,弹吉他,弹小提琴,还弹评委的脸……
评委:???
章鱼:我都说了,我会弹一切。
🐔:“你知道我为什么不下蛋了吗?”
👨:“为什么?”
🐔:“因为我最近鸡情冷淡。”