我有一个带有枚举的dll (还有许多其他的东西)。
enum class KIT_API VoxelTypes : uint16_t
{
... about a hundred entries ...
ModellingClay_00 = 65406,
... more entries ...
ModellingClay_128,
COUNT
};元素计数的值为65535。在“生成代码”阶段,我已经编译了45分钟。如果我将ModellingClay_00设置为10000,它将在5-10分钟内编译。15000似乎花费了相当长的时间,但最终还是进行了编译。
是否有任何理由,一个枚举应该花费更长的时间来编译简单地改变它所包含的值?
我很肯定,我与Visual的某些内在巫毒相冲突,这是为我个人的折磨而预留的。有人能指出我做过的一些明显的事情,甚至听说过这件事吗?
发布于 2017-09-23 05:14:10
安格的分析是正确的。
有一个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});还必须添加一些数学函数来访问数组元素。我想这是最快的方法。它包含了我的体素的定义,所以我需要经常访问它。(我想我也可以为每个voxel属性定义单独的数组,这些数组可能很小,可以编译。这可能比将所有属性放入一个巨大的数组更快)
const Element& GetWhoppingElement(int index)
{
int majorIndex = index / 1024;
int minorIndex = index % 1024;
return whoppingBigTable[majorIndex][minorIndex];
}https://stackoverflow.com/questions/46358799
复制相似问题