画面録画:VS Code で SharpLsp を使い F# アプリをプロファイリング。ホットなパイプラインのステージとクロージャーから、モジュール値からリークする F# のレコードと共用体ケース、修正の確認まで
文字起こし
これは FsStorefront、いま実際に動いている F# アプリです。時間がどこに使われているのか見てみましょう。
プロファイラーを止めると、F# のホットな行がすべて光ります。カタログの解析、バスケットのシャッフル、そして割引の fold です。
結果には、F# コンパイラーがコードに付けた名前がそのまま残ります。クロージャーもパイプラインのステージも行にちなんだ名前なので、どこを見ればいいかがすぐわかります。
次は同じアプリのメモリを追跡しましょう。SharpLsp が 10 秒ごとにヒープのスナップショットを取ります。
F# のレコードと共用体ケースがリークの疑いとして現れます。クリックすると、それを組み立てる行に直接ジャンプします。
では、何がそれらを生かし続けているのでしょうか?
sessions というモジュール値です。書いたとおりの名前で示されます。アプリがこれまでに扱ったすべてのセッションを保持しています。
修正は、直近 1,000 件のセッションだけを残し、残りを手放すことです。
再ビルドして、もう一度実行し、メモリを追跡します。
今度はヒープが横ばいのまま、Low を超えるものはありません。これが SharpLsp の F# プロファイリングです。無料で、オープンソースです。