由於定義的功能代碼儘可能避免可變性,所以可以通過從前一個時間展開狀態來編寫有狀態程序。所以,我用純粹的功能風格寫了一個F#遊戲,當然遊戲往往有很多很多的狀態。我基本上使用遊戲對象(例如玩家)的記錄,並且我簡單地映射所有這些狀態以獲得下一個狀態。這工作非常好。但是,隨着我的遊戲結構越來越複雜,我擔心它會因爲複製每個更新而變得遲鈍。我想知道如何在將來避免這些陷阱(不過現在不是這個時候,因爲它還沒有太多問題,但是)。效率與功能範例
那麼,有沒有在功能風格,F#不爲我做任何使用優化顯著,具體涉及到複製大量數據時,只有一小部分可能會改變?另外,有沒有什麼F#可以用我的優勢以同樣的方式?
還有一件事 - 這是我的兩個主要擔心,可能不是真的。我很想把這些弄清楚:
垃圾收集。由於我最終每秒拷貝數千條記錄,因此必須有大量的對象生成,所有這些都是非常短暫的,因爲我只是拋棄舊狀態。這似乎是每秒鐘左右遊戲中短暫而難以察覺的跳躍的可能原因。
是F#高效的拷貝記錄了所有,但更新的幾個字段?如果不是,我該如何提高效率?
這是一個非常廣泛的問題。試着把注意力集中在每個問題的一個問題上(最好是具體的東西 - 嘗試寫一些慢的問題,然後詢問如何更快地寫出問題,這樣我們就有一些具體的工作)。 – mydogisbox
我會本地化您的應用程序的熱路徑,將其與代碼的其餘部分分開,然後讓它在內部變爲可變。 –
吶,別擔心。 perf的主要障礙是可理解性。作爲第一個近似,任何可以理解的代碼最終都會比其他任何不可代碼的代碼更快,不管使用什麼方法。當然要擠掉最後一滴果汁,並且只有在正確測量時間之後,您才必須使用突變,但這應該是您最擔心的問題。 – nicolas