Wann sollte man eine DLL benutzen?
-
FreakY<3Cpp schrieb:
"Da könnte mein Programm langsam werden"
Ein Programm wird nicht schneller wenn man es in DLL's aufteilt...
-
loks schrieb:
Ein Programm wird nicht schneller wenn man es in DLL's aufteilt...
Ah okay, dann habe ich das missverstanden
Endline, dein Beispiel klingt natürlich logisch, aber bei sehr vielen Programmen, oder auch Spiele, existiert nur eine Executable, aber an die 10 DLL's und die wurden mit hoher Wahrscheinlichkeit selbstgemacht und nicht aus dem Internet gezogen, um sie auch zu verwenden.
-
Ja, aber die Gründe dafür sind nicht Größe oder Speed.
-
FreakY<3Cpp schrieb:
loks schrieb:
Ein Programm wird nicht schneller wenn man es in DLL's aufteilt...
Ah okay, dann habe ich das missverstanden
Endline, dein Beispiel klingt natürlich logisch, aber bei sehr vielen Programmen, oder auch Spiele, existiert nur eine Executable, aber an die 10 DLL's und die wurden mit hoher Wahrscheinlichkeit selbstgemacht und nicht aus dem Internet gezogen, um sie auch zu verwenden.Oft werden diese 10 DLLs dann in anderen Spielen des gleichen Herstellers nochmal verwendet.
-
Ich habe ja keine Ahnung, aber ich kann mir vorstellen, dass es Vorteile hat, modular zu arbeiten, wenn viele Leute am gleichen Projekt arbeiten. Spiele werden sicherlich zum Teil von Teams mit 50+ Teilnehmern programmiert, wie soll man da jemals das Projekt kompilieren? Da muss man ja jedesmal den Code von 10 Teams zusammenkopieren. Wenn dann ein Fehler auftritt oder man ein neues Feature einbauen will, kann man stattdessen einfach die entsprechende Projektgruppe ankacken und eine korrigierte DLL anfordern, während der Rest des Teams normal weiterarbeiten kann.
Außerdem kompiliert man sich ja tot, wenn man alles in eine exe packt, nur weil man eine kleine Routine irgendwo verändert hat. Dann doch lieber die eine DLL neu kompilieren.
-
Mr.Fister schrieb:
Da muss man ja jedesmal den Code von 10 Teams zusammenkopieren.
Dafür bietet C# das Stichwort "partial"
Man kann an einer Klasse gleichzeitig über mehrere Dateien arbeiten. Trotzdem habe ich ein Programm, dass in C# geschrieben ist und mehrere DLL's besitzt. Das mit der langen Kompilierzeit wäre irgendwo schon ein Argument, aber bei einem Programm von 15MB sollte das nicht tragisch sein.
-
Mr.Fister schrieb:
Ich habe ja keine Ahnung, aber ich kann mir vorstellen, dass es Vorteile hat, modular zu arbeiten, wenn viele Leute am gleichen Projekt arbeiten. Spiele werden sicherlich zum Teil von Teams mit 50+ Teilnehmern programmiert, wie soll man da jemals das Projekt kompilieren? Da muss man ja jedesmal den Code von 10 Teams zusammenkopieren. Wenn dann ein Fehler auftritt oder man ein neues Feature einbauen will, kann man stattdessen einfach die entsprechende Projektgruppe ankacken und eine korrigierte DLL anfordern, während der Rest des Teams normal weiterarbeiten kann.
Da gibt es bessere Wege.
Mr.Fister schrieb:
Außerdem kompiliert man sich ja tot, wenn man alles in eine exe packt, nur weil man eine kleine Routine irgendwo verändert hat. Dann doch lieber die eine DLL neu kompilieren.
Nö. C# compilieren geht ratz fatz.
-
OK, ich kenne nur meine Kompilierorgien als ich noch Gentoo genutzt habe
-
Mr.Fister schrieb:
OK, ich kenne nur meine Kompilierorgien als ich noch Gentoo genutzt habe
Ich mess mal was...
RunUO ist in C# http://www.runuo.com
Die 2609 *.cs-Dateien mit zusammen 11M sind auf meinem einen Kern in 60 Sekunden durch.
-
Mr.Fister schrieb:
Ich habe ja keine Ahnung, aber ich kann mir vorstellen, dass es Vorteile hat, modular zu arbeiten, wenn viele Leute am gleichen Projekt arbeiten. Spiele werden sicherlich zum Teil von Teams mit 50+ Teilnehmern programmiert, wie soll man da jemals das Projekt kompilieren? Da muss man ja jedesmal den Code von 10 Teams zusammenkopieren. Wenn dann ein Fehler auftritt oder man ein neues Feature einbauen will, kann man stattdessen einfach die entsprechende Projektgruppe ankacken und eine korrigierte DLL anfordern, während der Rest des Teams normal weiterarbeiten kann.
Normalerweise verwendet man bei großen Projekten Versionsverwaltungssysteme wie subversion, git, cvs etc..
Und da gibt es dann einen zentralen Server (oder man ernennt einen dazu bei git der Fall) mit dem ganzen Quellcode und von dort holt man sich dann auch seinen aktuellen Quellcode ab.
Aber commiten, also hochladen tut man auf diesen Server nur dann, wenn der eigene Code stabil läuft.
Deswegen führt eine strenge Anwendung dieses Verhaltens dazu, daß man immer einen sauberen code hat der auch durchcompiliert und zwar für alle Gruppen.Eine erweitere Form davon ist, daß es neben dem Hauptzweig auf dem Server noch nebenzweige gibt, also sogenannte Branches, die werden getrennt vom Hauptzweig verwaltet.
Und um diese Zweige können sich dann die jeweiligen Gruppenmitglieder dieser Gruppe die diesen Zweig verwaltet streiten.Geht also alles ohne DLLs.