problemas - La enumeración de Visual Studio C++ tarda mucho tiempo en compilarse
visual studio no muestra errores (1)
Tengo un dll con una enumeración (y muchas otras cosas)
enum class KIT_API VoxelTypes : uint16_t
{
... about a hundred entries ...
ModellingClay_00 = 65406,
... more entries ...
ModellingClay_128,
COUNT
};
El valor del elemento COUNT es 65535. Lo he estado compilando durante más de 45 minutos en la etapa "Generar código". Si configuro ModellingClay_00 en 10000, se compila en aproximadamente 5-10 minutos. 15000 parece tomar bastante más tiempo, pero eventualmente compiló.
¿Hay alguna razón por la cual una enumeración demore mucho más en compilar simplemente cambiando el valor que contiene?
Estoy bastante seguro de haberme enfrentado a algún vudú interno de Visual Studio reservado para mi tormento personal. ¿Alguien puede señalar algo obvio que he hecho, o incluso haber oído hablar de esto antes?
El análisis de Angew es correcto.
Había una matriz estática de VoxelTypes :: COUNT elementos. Cada elemento tenía 88 bytes, para un total de 5,767,168 (5,5 Mb).
Mi trabajo fue crear una matriz de matrices dinámicas en lugar de utilizar una tabla masiva de inicializadores de matriz.
Antiguo:
static Elements whoppingBigTable[] = {
{Item1, 1, 1},
{Item2, 2, 2},
};
Nuevo:
static Elements* whoppingBigTable[64];
for(int i = 0; i < 64; i++)
{
whoppingBigTable = new Elements[1024];
}
AddElement({Item1, 1, 1});
AddElement({Item2, 2, 2});
También tuve que agregar alguna función matemática para acceder a los elementos de la matriz. Supongo que esta es la forma más rápida de hacerlo. Contiene las definiciones de mis vóxeles, así que necesito acceder a él con frecuencia. (Supongo que también podría definir matrices separadas para cada propiedad de vóxel, y esas matrices podrían ser lo suficientemente pequeñas como para compilar. Eso podría ser incluso más rápido que poner todas las propiedades en una matriz gigante)
const Element& GetWhoppingElement(int index)
{
int majorIndex = index / 1024;
int minorIndex = index % 1024;
return whoppingBigTable[majorIndex][minorIndex];
}