我有一个带枚举的dll(和许多其他东西)
enum class KIT_API VoxelTypes : uint16_t
{
... about a hundred entries ...
ModellingClay_00 = 65406,
... more entries ...
ModellingClay_128,
COUNT
};
元素COUNT的值为65535。 我已经在#34; Generating Code"中编译了这个超过45分钟的时间。阶段。如果我将ModellingClay_00设置为10000,它将在大约5-10分钟内编译。 15000似乎需要更长的时间,但最终会编译。
是否有任何理由说enum应该花费更长的时间来编译,只需更改它包含的值?
我很确定我与Visual Studio的一些内心巫术相冲突,因为我的个人折磨。任何人都可以指出我已经完成的事情,或者甚至在此之前听说过吗?
答案 0 :(得分:4)
Angew的分析是正确的。
有一个VoxelTypes :: COUNT元素的静态数组。每个元素为88个字节,总计5,767,168(5.5 Mb)。
我的解决方法是创建一个动态数组数组,而不是使用庞大的数组初始值表。
旧:
static Elements whoppingBigTable[] = {
{Item1, 1, 1},
{Item2, 2, 2},
};
新:
static Elements* whoppingBigTable[64];
for(int i = 0; i < 64; i++)
{
whoppingBigTable = new Elements[1024];
}
AddElement({Item1, 1, 1});
AddElement({Item2, 2, 2});
还必须添加一些数学函数来访问数组元素。我认为这是最快的方法。它包含我的体素的定义,所以我需要经常访问它。 (我想我也可以为每个体素属性定义单独的数组,这些数组可能小到可以编译。这可能比将所有属性放入一个巨大的数组更快)
const Element& GetWhoppingElement(int index)
{
int majorIndex = index / 1024;
int minorIndex = index % 1024;
return whoppingBigTable[majorIndex][minorIndex];
}