mmorpg的大規模團戰中,需要經常判斷兩個單位之間的陣營關係,從而為技能生效提供判斷依據(往往分為敵方、我方、友方、中立方等)。如果n個人同時使用技能,這個判斷函式的呼叫次數將會是n**2的量級。
而隨著遊戲的生命週期的延長,這種判斷會變得越來越繁雜(不加東西怎麼做社交?怎麼坑錢^_^)。這時候,這個判斷函式就有可能會(肯定會)成為戰鬥系統的瓶頸。
優化方案:
建立cache快取陣營關係
實現細節:
1. 在某個量級上建立乙個cache,這個cache用來儲存未來的陣營關係,初始為空
2. 在戰鬥單位上新增乙個屬性ver,這個屬性用來標記戰鬥單位的所有陣營關係引數集合的版本,一旦其中任何乙個引數發生改變,ver+=1
3. 一旦發生某次判斷得到結果ret,就以當時的(src_id, tgt_id)作為key,存入(src_ver, tgt_ver, ret)
4. 下次發生判斷時,就先去cache裡查詢,如果命中,就得到上一次的src_ver, tgt_ver, ret,將ver做對比,如果沒有發生改變,就直接讀取ret,否則就重新進行判斷並重複3中操作(切記陣營關係只是單向的,不一定是雙向的,所以src-tgt跟tgt-src不一定結果相同)
此時只是功能上實現了優化,隨著時間的推移,cache的大小會越來越大,而其中很多單位已經離開這個管理量級的管理範圍了,他們的陣營關係已經無用。因此:
5. 加入定時器,定時clear此cache。由於業務上特點,這種判斷是集中在某段時間內的頻繁呼叫,因此不需要加入時間戳來保證「xx時間內不用的cache才被清除」這種優化。
系統效能優化(一)
我們都知道在實際做專案時,有一條 原則,就是先實現其功能,在優化其效能。當我們功能都沒有實現的時候,就考慮其效能優化,想一次性就寫出效能最好的方案,顯然是非常有難度的,所以我們先將其功能實現,再逐步優化。假設現在我們想實現乙個最基礎的相關錯題複習的功能,如我們在網上進行刷題的時候,當我們做錯一到題目...
優化系統效能
程式框架 hibernate3 struts2 spring2 資料庫 sqlserver2008 伺服器 tomcat6 優化方法 1 配置連線池 採用的c3p0連線池 2 在程式中獲取列表時,用iterator代替list 3 在查詢之後可以使用session.clear 方法釋放快取 4 用資...
Linux系統效能優化
由於各種的i o負載情形各異,linux系統中檔案系統的預設配置一般來說都比較中庸,強調普遍適用性。然而在特定應用下,這種配置往往在i o效能方面不能達到最優。因此,如果應用對i o效能要求較高,除了採用效能更高的硬體 如磁碟 hba卡 cpu mem等 外,我們還可以通過對檔案系統進行效能調優,來...