以下のサンプルコードでは、Websharperアプリケーションの単一ページに、私のプロジェクトで発生した問題が示されています。Websharperアプリケーションのパフォーマンスが低下し、メモリリークの可能性があります
時間が経つにつれて、徐々に時間がかかります。数秒ごとに発生します。長期間(20分以上)経過すると、ChromeはsetTimeoutとrequestAnimationFrameが50msより長くかかることを警告します。
Chromeでメモリグラフを観察すると、ガベージコレクションを手動で有効にしても使用量が増えるため、メモリリークが発生しているようです。私の疑問は、これが通常のガベージコレクションに負荷を与え、実行時間が長くなっているということです。
この問題を見つけて解決する方法はありますか?
open WebSharper
open WebSharper.JavaScript
open WebSharper.JQuery
open WebSharper.UI.Next
open WebSharper.UI.Next.Client
open WebSharper.UI.Next.Html
open WebSharper.UI.Next.Notation
[<JavaScript>]
module Client =
type IndexTemplate = Templating.Template<"index.html">
type T = {
i : int
n : float
d : float
}
let Main =
JQuery.Of("#main").Empty().Ignore
let v = Var.Create {
i = 0
n = 0.0
d = 0.0
}
let rec f (n : float) =
let w = !v
v :=
{w with
i = w.i + 1
n = n
d = n - w.n
}
s()
and s() =
JS.RequestAnimationFrame f |> ignore
s()
div [
div [v.View |> View.Map (fun t -> "Frame " + string t.i) |> textView]
div [v.View |> View.Map (fun t -> sprintf "Started: %.1f" t.n) |> textView]
div [v.View |> View.Map (fun t -> sprintf "Duration: %.1fms" t.d) |> textView]
]
|> Doc.RunById "main"
私はWebsharper 3.6.20.6、WebSharper.UI.Next 3.6.18.2とChrome 59.0.3071.115を使用しています。レポートの
ありがとうございました。修正の前と後の私のプロジェクトのZafirビルドは、変更が有効であることを確認します。ガベージコレクションは割り当てられたメモリを再利用し、パフォーマンスは維持されます。 – cadull