ナレーション、オリジナル音楽、字幕付き。VS Code で収録した FsStorefront デモでの F# の一連の流れ:Profile CPU と .fs の行のヒートマップ、Track Memory、組み立てた行に塗られるレコードと共用体ケース、モジュール値をルートとする保持グラフ、修正の入力、そして再実行。早送りの部分は画面上に表示されます。

画面録画:VS Code で SharpLsp を使い F# アプリをプロファイリング。ホットなパイプラインのステージとクロージャーから、モジュール値からリークする F# のレコードと共用体ケース、修正の確認まで

ガイドを読む:F# のプロファイリング

文字起こし

これは FsStorefront、いま実際に動いている F# アプリです。時間がどこに使われているのか見てみましょう。

プロファイラーを止めると、F# のホットな行がすべて光ります。カタログの解析、バスケットのシャッフル、そして割引の fold です。

結果には、F# コンパイラーがコードに付けた名前がそのまま残ります。クロージャーもパイプラインのステージも行にちなんだ名前なので、どこを見ればいいかがすぐわかります。

次は同じアプリのメモリを追跡しましょう。SharpLsp が 10 秒ごとにヒープのスナップショットを取ります。

F# のレコードと共用体ケースがリークの疑いとして現れます。クリックすると、それを組み立てる行に直接ジャンプします。

では、何がそれらを生かし続けているのでしょうか?

sessions というモジュール値です。書いたとおりの名前で示されます。アプリがこれまでに扱ったすべてのセッションを保持しています。

修正は、直近 1,000 件のセッションだけを残し、残りを手放すことです。

再ビルドして、もう一度実行し、メモリを追跡します。

今度はヒープが横ばいのまま、Low を超えるものはありません。これが SharpLsp の F# プロファイリングです。無料で、オープンソースです。