Eine Antwort (siehe unten) auf eine der Fragen hier auf Stack Overflow brachte mich auf die Idee für ein großartiges kleines Stück Software, das für Programmierer überall von unschätzbarem Wert sein könnte.
Ich stelle mir eine RAM-Drive-Software vor, aber mit einem entscheidenden Unterschied: Sie würde einen echten Ordner auf meiner Festplatte spiegeln. Genauer gesagt - den Ordner, der das Projekt enthält, an dem ich gerade arbeite. Auf diese Weise würden alle Builds fast sofort erfolgen (oder zumindest um einige Größenordnungen schneller). Das RAM-Laufwerk würde seinen Inhalt im Hintergrund mit dem Festplattenlaufwerk synchronisieren und dabei nur ungenutzte Ressourcen verwenden.
Eine schnelle Google-Suche ergab nichts, aber vielleicht weiß ich einfach nicht, wie man googelt. Vielleicht kennt jemand eine solche Software? Vorzugsweise kostenlos, aber angemessene Gebühren wären auch OK.
Hinzugefügt: Es wurden einige Lösungen vorgeschlagen, die ich gleich zu Beginn verworfen habe. Sie lauten (in keiner bestimmten Reihenfolge):
- Kaufen Sie ein schnelleres Festplattenlaufwerk ( SSD vielleicht oder 10K RPM). Ich möchte keine Hardware-Lösung. Software ist nicht nur potenziell billiger (Freeware, wer möchte?), sondern kann auch in Umgebungen eingesetzt werden, in denen Hardware-Modifikationen unerwünscht oder sogar unmöglich wären - beispielsweise im Büro.
- Überlassen Sie das Zwischenspeichern dem Betriebssystem/der Festplatte - es weiß besser, wie es Ihren freien Arbeitsspeicher nutzen kann. Das Betriebssystem/die Festplatte verfügt über allgemeine Cache-Algorithmen, die alles zwischenspeichern und versuchen vorherzusagen, welche Daten in Zukunft am meisten benötigt werden. Sie haben keine Ahnung, dass für mich mein Projektordner Priorität hat. Und wie wir alle wissen, wird dort sowieso nicht viel zwischengespeichert ;)
- Es gibt jede Menge RAM-Drives; verwenden Sie eine davon. Tut mir leid, das wäre leichtsinnig. Ich muss meine Daten immer dann auf die Festplatte zurücksynchronisieren, wenn ich ein bisschen Zeit habe. Im Falle eines Stromausfalls könnte ich es ertragen, die letzten fünf Minuten Arbeit zu verlieren, aber nicht alles seit meinem letzten Check-in.
Hinzugefügt 2: Eine Idee, die aufkam - verwenden Sie ein normales RAM-Laufwerk plus einen Hintergrund-Ordner-Synchronisierer (aber ich meine Hintergrund ). Gibt es so etwas?
Hinzugefügt 3: Interessant. Ich habe gerade ein einfaches RAM-Laufwerk bei der Arbeit ausprobiert. Die Wiederherstellungszeit sinkt von ~14 Sekunden auf ~7 Sekunden (nicht schlecht), aber die inkrementelle Erstellung dauert immer noch ~5 Sekunden - genau wie auf der HDD. Irgendwelche Ideen, warum? Es verwendet aspnet_compiler
et aspnet_merge
. Vielleicht machen sie etwas mit anderen temporären Dateien an anderer Stelle?
Hinzugefügt 4: Oh, eine schöne neue Reihe von Antworten! :) OK, ich habe noch ein paar Infos für alle Neinsager :)
Einer der Hauptgründe für diese Idee ist nicht die oben erwähnte Software (14 Sekunden Bauzeit), sondern eine andere, auf die ich damals keinen Zugriff hatte. Diese andere Anwendung hat eine 100 MB große Codebasis, und ihre vollständige Erstellung dauert etwa 5 Minuten. Ah ja, es ist in Delphi 5 Der Compiler ist also nicht allzu fortschrittlich. :) Wenn man den Quellcode auf ein RAM-Laufwerk legt, ergibt sich ein GROSSER Unterschied. Ich habe es unter eine Minute gebracht, glaube ich. Ich habe nicht nachgemessen. Also für alle, die sagen, dass das Betriebssystem Dinge besser zwischenspeichern kann - ich bin da anderer Meinung.
Verwandte Frage:
Anmerkung zum ersten Link: Die Frage, auf die sie verweist, wurde gelöscht, weil sie ein Duplikat war. Sie fragte:
Was tun Sie, während Ihr Code kompiliert wird?
Und die Antwort von Dmitri Nesteruk die ich verlinkt habe, war:
Ich kompiliere fast augenblicklich. Das liegt zum Teil daran, dass meine Projekte klein sind, zum Teil an der Verwendung von RAM-Disks.
0 Stimmen
Warum ist eine Änderung der Hardware im Büro nicht möglich? Wir haben immer ein gewisses Budget zur Verfügung, wenn der Wert vorhanden ist. Außerdem bin ich bekannt dafür, Hardware mit meinem eigenen Geld zu kaufen, nur um meine Arbeit angenehmer zu gestalten.
2 Stimmen
In meinem Fall dauern die Builds ~15s inkrementell und ~30s vollständig. Nicht wirklich etwas, womit man den Chef überzeugen kann. Aber es wäre schön, wenn es 1s wäre :) Und ich möchte nicht mein eigenes Geld in so etwas investieren. Außerdem - es gibt viele Leute da draußen und jeder hat eine andere Geschichte. Viele haben vielleicht auch einen Nutzen davon.
4 Stimmen
Wenn ich Ihr Chef wäre, würde ich mich dafür interessieren, wie Sie die Bauzeit von 15-30 Sekunden auf 1 Sekunde reduzieren können. Jede Eine wahrnehmbare Verzögerung ist eine Gelegenheit zur Verbesserung. Die Produktivität der Entwickler wird durch jede Verzögerung direkt beeinträchtigt.
3 Stimmen
@Jay Leider sind in vielen Unternehmen Ausrüstung und Entwicklungszeit je nach Buchhaltungsstruktur völlig unterschiedliche Kosten, und es ist leider oft finanziell sinnvoll, bei der Hardware zu sparen, auch wenn die Entwicklungszeit enorme zusätzliche Kosten verursacht. Der Chef hat vielleicht keine Kontrolle darüber.
0 Stimmen
Der Link zur Antwort ganz am Anfang funktioniert nicht, könnten Sie ihn aktualisieren?
0 Stimmen
Es ist ziemlich unglaublich, wie viele Leute eine "der OS-Cache, also mach dir keine Mühe"- oder "benutze eine SSD"-Haltung zu dieser Art von Dingen einnehmen, ohne einen Benchmark durchzuführen. Ich habe gerade die Einrichtung eines neuen Build-Servers für mich selbst abgeschlossen, der Build-Server hat bereits eine SSD. Ich habe dem Prozess eine Ramdisk hinzugefügt, was die Build-Zeit von 12 auf 10 Minuten für eine Plattform reduziert, da das System für 3 Plattformen gebaut werden muss, was insgesamt eine Reduzierung um 6 Minuten bedeutet. Natürlich auf einem Build-Server theres keine Notwendigkeit, über die Synchronisierung etwas zurück außer die Ergebnisse zu kümmern, so ist ein bisschen einfacher einzurichten.