2017-03-09 4 views
0

Wie viel Leistungsverlust gibt es, um flatbuffer mutable zu verwenden?Veränderbare Flatbuffer, Leistungsverlust?

Ist es „richtige“ Verwendung von flatbuffers ein Objekt/stuct zu haben, die bearbeitet werden (dh Spielzustand)

In meinem Beispiel soll ich habe die folgenden Klassen zur Zeit:

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

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

class Unit: 
    int id; 
    int hp 
    ... 

Wäre es sinnvoll, für jedes dieser Objekte einen Flatbuffer zu verwenden, der alle Informationen über jede Einheit speichert? Oder würde ein veränderbarer Flatbuffer die Leistung verringern?

Wenn Flatbuffers für diesen Job falsches Werkzeug sind, welche Technologie sollte verwendet werden?

Antwort

0

FlatBuffers hat eine sehr effiziente In-Place-Mutation von Skalaren, aber das mutieren von Dingen wie Vektoren an Ort und Stelle erfordert die Verwendung von Reflektion, die momentan langsamer und unhandlicher ist, daher nicht als häufig modifizierter Spielzustand zu empfehlen.

Stattdessen würde ich in Ihrem Fall empfehlen, die Objekt-API (--gen-object-api) zu verwenden, die Ihnen eine automatische Konvertierung zu/von einem FlatBuffer ermöglicht und Ihnen eine bequeme Mutation mit C++ - Standardtypen ermöglicht.

+0

Eine kleine Nebenstraße auf dem Weg zum Erfolg; Aus irgendeinem Grund passiert nichts, wenn ich mein Objekt mit den veränderbaren Accessoren bearbeite. Der Wert wird einfach nicht geändert/mutiert. –

+0

Überprüfen Sie den Rückgabewert? Wenn es falsch ist, bedeutet dies, dass es nicht geändert werden konnte, weil das Feld nicht vorhanden war (z. B. wenn es dem Standardwert entspricht). Sie können dies vermeiden, indem Sie den FlatBuffer mit der Option force_defaults im Builder erstellen. – Aardappel

+0

Ok, also müssen alle Felder initialisiert werden, damit sie änderbar sind? –

Verwandte Themen