180bpm

unity5에서 데이터 직렬화/역직렬화 본문

Develop/Unity

unity5에서 데이터 직렬화/역직렬화

powdersnow 2017. 1. 10. 19:09
밑에꺼 다 버리고...
ScriptableObject 만들어서 Build할때 CSV 읽어서 데이터 넣어주는 형식.

실데이터 기준으로
ScriptableObject 파일 크기 - 20mb.
파일 불러오기 - 1100ms

파일 크기가 큰건 어쩔수 없는게, ScriptableObject를 쓰면 [변수명 - 값] 형태로 저장이 되어서
변수명이 중복기재되기 때문.

파싱은 없지만 파일 크기가 커서 읽는데 약간 시간이 걸리나 속도개선은 되었음.


############################################################

http://180bpm.tistory.com/96

unity4때는 위에서 설명했던 msgPack을 이용한 직렬화/역직렬화를 통해 테이블 로딩 속도를 크게 개선했다.

수치로 따지면 XML 파싱 40000ms -> 1500ms 이내



unity5 프로젝트 진행 초반때도 사용하려고 테스트 해봤는데 오히려 속도가 떨어져서 안썼다.



이제 프로젝트가 폴리싱 시점에 들어섰기때문에 속도 개선할만한것들을 다 건들여보고 있는데..


우선 msgPack으로 테스트 했던 결과.

unity4때 쓰던 pokehanai - msgPack ( https://github.com/pokehanai/msgpack-unity )

아직은 업데이트 되는 deniszykov - msgPack ,json ( https://github.com/deniszykov/msgpack-unity3d ) 

그리고 지금 사용중인 csv parser


PC 역직렬화 테스트 , 실데이터 (dic, list 혼합된 데이터 20여개, 컬럼은 대략 3만개)

csv pokehanai - msgPack deniszykov - msgPack deniszykov - jsonPaser ZeroFormatter
15000 42000 40000 24000 준비중


너무 느리다;;

에셋번들이 문제인가 해서 직접 로드해봤으나 차이 없음.

PC에서는 이정도인데 우리 min spec인 갤럭시 s4에서는 30000ms. 테이블 로딩하는데만 30초라니.


이제 테스트할 것들.

msgPack을 위한 어트리뷰트 먹이기 (귀찮지만, 지금 코드 그대로 테스트 가능)

https://github.com/neuecc/ZeroFormatter (어트리뷰트를 먹여야하는 귀찮음)

https://github.com/mgravell/protobuf-net (우리 게임서버에서도 사용중. 다만 포맷 만들어주고 거기다 어트리뷰트까지.)

Comments