2017-03-09 40 views
0

使用flatbuffer可變性有多大的性能損失?可變扁平緩衝器,性能損失?

它是「正確」使用flatbuffers的有對象/ stuct這應該是編輯(即遊戲狀態)

在我的例子,我有此刻的以下類:

class Game: 
    std::vector<Player>; 
    int frames; 

class Player: 
    std::string name; 
    int oil; 
    std::vector<Unit>; 

class Unit: 
    int id; 
    int hp 
    ... 

爲每個存儲關於每個單元的所有信息的對象使用平緩緩衝區是否明智?或者一個可變的平緩緩衝器會降低性能?

如果flatbuffers是這項工作的錯誤工具,應該使用哪種技術?

回答

0

FlatBuffers具有非常高效的就地標量變異,但是就地變換像矢量這樣的東西需要使用反射,目前反射比較慢且笨拙,因此不推薦將其用作經常修改的遊戲狀態。

相反,在你的情況下,我建議使用對象API(--gen-object-api),它可以讓你自動轉換到FlatBuffer或者從FlatBuffer自動轉換,並允許使用標準C++類型進行方便的突變。

+0

通往成功之路的一點小路;所以,由於某種原因,當我編輯我的對象使用可變accessor沒有真正發生。該值不會被改變/變異。 –

+0

你在檢查返回值嗎?如果它是假的,則意味着它不能被改變,因爲該字段不存在(例如當等於默認值時)。您可以通過在構建器中使用force_defaults選項創建FlatBuffer來避免此問題。 – Aardappel

+0

好的,所有的字段都必須先設置爲可變的? –