2017-07-17 12 views
1

以下のサンプルコードでは、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を使用しています。レポートの

答えて

2

おかげで、私はこのチケットにそれをリンクしていますhttps://github.com/intellifactory/websharper.ui.next/issues/129

は修正今日でWebSharper 4ベータスタックのリリースがあるでしょう、と我々はに戻って、移植には、このようないくつかの重要な改善点を見ていきますWebSharper 3

+0

ありがとうございました。修正の前と後の私のプロジェクトのZafirビルドは、変更が有効であることを確認します。ガベージコレクションは割り当てられたメモリを再利用し、パフォーマンスは維持されます。 – cadull

関連する問題