Wie bereits festgestellt wurde, verlangsamt das Einbinden von Windows.h die Kompilierzeit. Sie können vorkompilierte Header verwenden oder die Windows-Aufrufe auf die Module beschränken, die sie benötigen, um die Kompilierung zu erleichtern.
Außerdem können Sie diese preproc-Definitionen vor dem Windows.h-Include wie folgt hinzufügen:
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
#include <windows.h>
Dadurch wird die Anzahl der Definitionen in Windows.h und in den subincludierten Header-Dateien reduziert. Möglicherweise stellen Sie später fest, dass Sie das Lean-and-Mean entfernen müssen, aber versuchen Sie es zuerst und warten Sie, bis der Compiler sich über eine fehlende Definition beschwert.
Die Namespace-Konflikte sind ein legitimes Ärgernis, haben aber technisch gesehen nichts mit Effizienz zu tun, es sei denn, Sie zählen die Effizienz Ihres persönlichen Zeitaufwands. Wenn man bedenkt, wie viele Tausende von Definitionen in Ihren Namespace geworfen werden, sind Konflikte irgendwann vorprogrammiert, und das kann sehr ärgerlich sein. Verwenden Sie einfach die Praxis, Ihre Windows-Aufrufe in Modulen zu isolieren, und es wird Ihnen nichts passieren. Dazu setzen Sie #include Windows.h in die .cpp-Datei und nicht in die .h-Datei.
Ich sehe keinen Grund zu der Annahme, dass die Laufzeitleistung der ausführbaren Datei durch die Einbindung von Windows.h beeinträchtigt wird. Sie fügen dem vom Compiler verwendeten Kontext lediglich eine große Anzahl von Definitionen hinzu. Sie fügen nicht einmal alle Definitionen in Ihren kompilierten Code ein - nur Zuweisungen, Funktionsaufrufe und Verweise, die auf den in Ihrem Quellcode (.cpp) verwendeten Definitionen basieren.
Ein weiteres Argument könnte sein, dass die Windows-API-Typen und -Funktionen von Natur aus ressourcenverschwendend sind oder ineffizient arbeiten. Wenn Sie z. B. eine Datei erstellen wollen, müssen Sie der Windows-API eine monströse Struktur übergeben. Dennoch denke ich, dass das meiste davon ein Pfennigfuchser-Denken ist. Bewerten Sie die Leistungsprobleme der Windows-API von Fall zu Fall und ersetzen Sie ineffizienten Code, wo dies möglich und sinnvoll ist.
2 Stimmen
Sie meinen, effizient zur Kompilierzeit, richtig? Wenn ja, ist es normalerweise vorkompiliert, aber Sie müssen es einbinden, wenn Sie es brauchen...
1 Stimmen
Ich denke, es ist in der Regel ineffizient in Bezug auf die Kompilierung; der Header ist RIESIG und enthält noch mehr riesige Header. Es führt eine riesige Menge an Symbolen in den globalen Namespace ein und bringt C++-Anwender zum Weinen.
0 Stimmen
Was meinen Sie mit ineffizient? Sie ist zwar groß, aber es handelt sich nur um eine Header-Datei. Sie können sie verschlanken, indem Sie ihr einige #define-Anweisungen voranstellen. Siehe hier de.wikipedia.org/wiki/Windows.h
0 Stimmen
Bei der Kompilierung und Ausführung. Entschuldigung, dass ich das nicht erwähnt habe.
2 Stimmen
Dort muss ein Witz über C++ und Code-Effizienz enthalten sein irgendwo ...