我正在使用 boost 序列化来序列化/反序列化 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,并且可以有很多 packagemeshes 来反序列化。
我担心由于它是自定义对象的向量,我相信我会在 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 字节或更多,所以有很多条目。
我能做些什么来优化这个?