屏幕录像:在 VS Code 中用 SharpLsp 分析 F# 应用,从热点管道阶段和闭包,到从模块值泄漏的 F# 记录和联合用例,再到验证修复
文字稿
这是 FsStorefront,一个正在运行的 F# 应用。我们来看看它的时间都花在了哪里。
停止性能分析器,F# 的每个热点行都会亮起:商品目录解析、购物篮洗牌,还有折扣 fold。
结果保留了 F# 编译器给代码起的名字。每个闭包和管道阶段都以它所在的行命名,所以你清楚地知道该看哪里。
现在来跟踪同一个应用的内存。SharpLsp 每十秒为堆拍一次快照。
F# 记录和联合用例被列为可疑泄漏。点击其中一个,就能直接跳到构造它的那一行。
那么,是什么让它们一直存活?
一个名为 sessions 的模块值,名称和你写的一模一样。它保存着应用见过的每一个会话。
修复方法:只保留最近一千个会话,其余的放手。
重新构建,再次运行,然后跟踪内存。
这一次,堆保持平稳,没有任何项超过 Low。这就是 SharpLsp 的 F# 性能分析。免费,而且开源。