2017-03-09 4 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)를 사용하는 것이 좋으며 표준 C++ 유형을 사용하여 편리한 변형을 허용 할 수 있습니다.

+0

성공의 길에 조금이라도 걸린다. 그래서, 어떤 이유로 변경 가능한 접근자를 사용하여 객체를 편집 할 때 실제로 아무 일도 일어나지 않습니다. 값은 단순히 변경/변경되지 않습니다. –

+0

반환 값을 확인하고 있습니까? false 인 경우 필드가 없기 때문에 변경할 수 없음을 의미합니다 (예 : 기본값과 같음). 빌더에서 force_defaults 옵션을 사용하여 FlatBuffer를 작성하면이 문제를 피할 수 있습니다. – Aardappel

+0

그래, 모든 필드가 변경 가능하도록 초기에 설정되어야합니까? –