次のように、ブースト シリアライゼーションを使用して 3D モデル メッシュをシリアライズ/デシリアライズしています。
struct PackageMesh
{
std::vector<Vec3> mVertexData;
std::vector<Vec3> mNormalData;
std::vector<Vec2> mTexCoordsData;
std::vector<uint32_t> mIndiceData;
uint16_t mMaterialIndex;
bool mHasMaterial;
PackageMesh();
};
現在、各ベクターには数千の Vec3 を含めることができ、逆シリアル化するパッケージメッシュが多数存在する可能性があります。
これはカスタム オブジェクトのベクトルであるため、Vec3/Vec2 のコンストラクターに多くの時間を費やし、パフォーマンスが低下する可能性があることを懸念しています。それは本当ですか? 代わりにすべてをフロートとして保存する方が速いでしょうか?
編集:かなり複雑なモデルとそのテクスチャなどの読み込みには5〜10秒ほどかかるので、プロファイリングを行いました...
http://i43.tinypic.com/xqansy.png
通常、最初の 5 ~ 10 秒でデシリアライズが行われることがわかります
キラーが実際にテクスチャ構造体をデシリアライズしていると思います
struct PackageTexture
{
std::string mName;
std::vector<uint8_t> mTextureData;
uint32_t mTextureWidth; // width/height in pixels
uint32_t mTextureHeight;
ITexture::TextureFormat mTextureFormat;
ITexture::TextureType mTextureType;
PackageTexture();
};
各テクスチャは約 200k バイト以上になる可能性があるため、大量のエントリになります。
これを最適化するにはどうすればよいですか?