c++ - विजुअल स्टूडियो सी++ एएनआईएम संकलन के लिए एक लंबा समय लगता है



visual-studio-2015 enums (1)

मैं एक enum (और कई अन्य चीजों के साथ एक dll है)

enum class KIT_API VoxelTypes : uint16_t
{
  ... about a hundred entries ...
    ModellingClay_00 = 65406,
... more entries ...
    ModellingClay_128,
    COUNT
};

तत्व का मान 65535 है। मैं इसे "जनरेटिंग कोड" चरण में 45 मिनट से अधिक समय से संकलित कर रहा हूं। अगर मैं मॉडलिंगकेल_00 से 10000 सेट करता हूं, तो यह लगभग 5-10 मिनट में संकलित होता है। 15000 थोड़ा अधिक समय लगता है, लेकिन अंततः संकलन किया

क्या कोई कारण है कि एक enum को केवल उस मूल्य को बदलने से बस संकलन करने में अधिक समय लेना चाहिए?

मुझे पूरा यकीन है कि मैंने विजुअल स्टूडियो के कुछ आंतरिक जादू की दौड़ को अपने निजी पीड़ा के लिए अलग रखा है क्या कोई मुझे कुछ स्पष्ट किया है जो मैंने किया है, या इससे पहले भी सुना है?


अंगव का विश्लेषण सही है।

VoxelTypes :: COUNT तत्वों की एक स्थिर सरणी थी कुल 5,767,168 (5.5 एमबी) के लिए प्रत्येक तत्व 88 बाइट थे।

मेरे काम के आसपास सरणी initializers की एक विशाल तालिका का उपयोग करने के बजाय गतिशील arrays की एक सरणी बनाने के लिए किया गया था

पुराना:

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});

सरणी तत्वों तक पहुंचने के लिए कुछ गणित फ़ंक्शन भी जोड़ना था। मुझे लगता है कि ऐसा करने का सबसे तेज़ तरीका है। इसमें मेरे voxels की परिभाषाएं हैं, इसलिए मुझे इसे अक्सर बार-बार एक्सेस करने की आवश्यकता है (मुझे लगता है कि मैं प्रत्येक voxel संपत्ति के लिए अलग-अलग सरणियों को भी परिभाषित कर सकता हूं, और उन सरणियों को संकलित करने के लिए काफी छोटा हो सकता है। यह सभी गुणों को एक विशाल सरणी में डाल देने से भी तेज हो सकता है)

const Element& GetWhoppingElement(int index)
{
    int majorIndex = index / 1024;
    int minorIndex = index % 1024;
    return whoppingBigTable[majorIndex][minorIndex];
}




enums