Im Laufe der Jahre ist meine Anwendung von 1 MB auf 25 MB angewachsen, und ich gehe davon aus, dass sie noch weiter auf 40 bis 50 MB anwachsen wird. Ich verwende keine DLLs, sondern packe alles in diese eine große ausführbare Datei.
Eine einzige große ausführbare Datei hat gewisse Vorteile:
- Die Installation meiner Anwendung beim Kunden ist eigentlich: Kopieren und ausführen.
- Upgrades können einfach gezippt und an den Kunden geschickt werden
- Es besteht kein Risiko, dass es zu Konflikten mit DLLs kommt (wenn der Kunde nicht Version X der EXE, sondern Version Y der DLL hat)
Der große Nachteil der großen EXE ist, dass die Verknüpfungszeiten exponentiell zu wachsen scheinen.
Ein weiteres Problem besteht darin, dass ein Teil des Codes (sagen wir etwa 40 %) mit einer anderen Anwendung geteilt wird. Auch hier sind die Vorteile, dass:
- Es besteht kein Risiko, eine Mischung aus falschen DLL-Versionen zu haben.
- Jeder Entwickler kann Änderungen an dem gemeinsamen Code vornehmen, was die Entwicklung beschleunigt.
Aber auch dies hat erhebliche Auswirkungen auf die Kompilierzeiten (jeder kompiliert den gemeinsamen Code auf seinem PC neu) und auf die Verknüpfungszeiten.
Die Frage Gruppierung von DLL's für die Verwendung in Executable erwähnt die Möglichkeit, DLLs in einer ausführbaren Datei zu mischen, aber es sieht so aus, als ob dies immer noch erfordert, dass Sie alle Funktionen manuell in Ihrer Anwendung verknüpfen (mit LoadLibrary, GetProcAddress, ...).
Was halten Sie von der Größe ausführbarer Dateien, der Verwendung von DLLs und der besten Balance zwischen einfacher Bereitstellung und einfacher/schneller Entwicklung?