带旁白、原创配乐和字幕。在 VS Code 中录制的 FsStorefront 演示 F# 完整流程:Profile CPU 和 .fs 行上的热力图、Track Memory、标在构造位置的记录和联合用例、根为模块值的保留图、输入修复代码,然后再次运行。快进的片段在画面上有标注。

屏幕录像:在 VS Code 中用 SharpLsp 分析 F# 应用,从热点管道阶段和闭包,到从模块值泄漏的 F# 记录和联合用例,再到验证修复

阅读指南:F# 性能分析

文字稿

这是 FsStorefront,一个正在运行的 F# 应用。我们来看看它的时间都花在了哪里。

停止性能分析器,F# 的每个热点行都会亮起:商品目录解析、购物篮洗牌,还有折扣 fold。

结果保留了 F# 编译器给代码起的名字。每个闭包和管道阶段都以它所在的行命名,所以你清楚地知道该看哪里。

现在来跟踪同一个应用的内存。SharpLsp 每十秒为堆拍一次快照。

F# 记录和联合用例被列为可疑泄漏。点击其中一个,就能直接跳到构造它的那一行。

那么,是什么让它们一直存活?

一个名为 sessions 的模块值,名称和你写的一模一样。它保存着应用见过的每一个会话。

修复方法:只保留最近一千个会话,其余的放手。

重新构建,再次运行,然后跟踪内存。

这一次,堆保持平稳,没有任何项超过 Low。这就是 SharpLsp 的 F# 性能分析。免费,而且开源。