Kompilierung langsam bei großen Arrays, Maps



  • Hi,
    es geht um hier um die Unreal Engine aber ich denke das spielt keine Rolle oder ihr könnt mir vielleicht trotzdem helfen.

    Ich brauche im Code recht viele Datensätze. Aus Kompatibilitätsgründen und auch wegen der Geschwindigkeit will ich keine Textdatei einlesen. Deswegen habe ich im Konstruktor eine Map die ich befülle. Es sind um die 500 Datensätze. Den Code zu kompilieren dauert auf meinem Zen 1 mit 8/16 Cores mehrere Minuten. Ohne die Datensätze 2-3 Sekunden. Kann mir Jemand erklären warum es so lange dauert? Ich bin auch für Vorschläge offen für eine schönere Lösung.

            mimeTypes.Add("ez", "application/andrew-inset");
    	mimeTypes.Add("anx", "application/annodex");
    	mimeTypes.Add("atom", "application/atom+xml");
    	mimeTypes.Add("atomcat", "application/atomcat+xml");
    	mimeTypes.Add("atomsrv", "application/atomserv+xml");
    	mimeTypes.Add("lin", "application/bbolin");
    	mimeTypes.Add("cu", "application/cu-seeme");
    	mimeTypes.Add("davmount", "application/davmount+xml");
    	mimeTypes.Add("dcm", "application/dicom");
    	mimeTypes.Add("tsp", "application/dsptype");
    	mimeTypes.Add("es", "application/ecmascript");
    	mimeTypes.Add("spl", "application/futuresplash");
    	mimeTypes.Add("hta", "application/hta");
    	mimeTypes.Add("jar", "application/java-archive");
    	mimeTypes.Add("ser", "application/java-serialized-object");
    	mimeTypes.Add("class", "application/java-vm");
    	mimeTypes.Add("js", "application/javascript");
    	mimeTypes.Add("json", "application/json");
    	mimeTypes.Add("m3g", "application/m3g");
    	mimeTypes.Add("hqx", "application/mac-binhex40");
    	mimeTypes.Add("cpt", "application/mac-compactpro");
    	mimeTypes.Add("nb", "application/mathematica");
    	mimeTypes.Add("nbp", "application/mathematica");
    	mimeTypes.Add("mbox", "application/mbox");
    //und so weiter
    


  • Schwer zu sagen ohne die Definition der Add Funktion zu sehen. Vermutlich läuft der Optimizer einige Ehrenrunden.

    Was helfen sollte ist die vielen Add Aufrufe zu vermeiden, z.B. ala

        struct ExtensionToMimeMapping {
            char const* extension;
            char const* mimeType;
        };
    
        ExtensionToMimeMapping mappings[] = {
            { "foo", "application/foo" },
            { "bar", "application/bar" },
            // ...
            };
    
        for (auto const& m : mappings) {
            mimeTypes.Add(m.extension, m.mimeType);
        }
    


  • Hab ein paar Sachen probiert aber auf ein Struct Array bin ich nicht gekommen.

    Läuft. Danke!



  • So einen Fehler müsste man eigentlich beim Compilerhersteller melden. Mehrere Minuten - das geht ja gar nicht!



  • @servus_ sagte in Kompilierung langsam bei großen Arrays, Maps:

    So einen Fehler müsste man eigentlich beim Compilerhersteller melden.

    Könnte Sinn machen, ja.

    Mehrere Minuten - das geht ja gar nicht!

    Lol, doch, das geht wohl. Kann sein dass es einfach zu fixen ist ohne andere Dinge dadurch zu verschlechtern. Kann aber auch sein dass es gar nicht einfach zu fixen ist. Einen Optimizer gut "abzustimmen" ist ein Balanceakt, und die Übersetzungsgeschwindigkeit von Code der völlig ohne Grund 500x den selben Funktionsaufruf in einer Funktion wiederholt hat dabei mMn. keine recht hohe Priorität.


Anmelden zum Antworten