Visual Studio C 枚举需要很长时间来编译

Visual Studio C++ enum takes a long time to compile

本文关键字:长时间 编译 Studio 枚举 Visual      更新时间:2023-10-16

我有一个带有枚举(和许多其他因素)

的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似乎需要更长的时间,但最终确实编译了。

有什么理由要简单地从更改其包含的值来编译的枚举应该花费更长的时间?

我很确定,我已经不愿意为我的个人折磨而进行内心的视觉工作室。谁能指出我已经做过的明显的事情,甚至以前听说过?

angew的分析是正确的。

有一系列静态的voxeltypes ::计数元素。每个元素为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];
}