Vielleicht kennt ihr ja auch das Problem, das eure Delphi Projekte aus vielen kleinen Dateien bestehen und wenn man versucht ein Projekt am USB-Stick zu bearbeiten das Kompilieren Ewigkeiten dauert. Noeskas virtuelles Dateisystem brachte mich dabei dann auf eine Idee - ich lege eine kopie der dateien in einem virtuellen laufwerk (auf grund der geringen daten menge muss es nur wenige MB groß sein) ab, welches im arbeitspeicher liegt -> man kann dann den stick zwar erst abziehen, nachdem man gespeichert hat, dafür läuft es wesentlich schneller. Da die Dateien ja eh eingelesen werden müssen, sollte auch da kein performance verlust drin liegen. Soweit meine Idee - dummerweise habe ich von der umsetzung nicht die geringste ahnung.
a) Wie erstelle ich ein Laufwerk
b) Wie schaffe ich einen virtuellen speicher, der wie ein laufwerk angesprochen werden kann?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Einen Virtuellen Speicher würde ich einfach mit GetMem holen. Aber das erstellen eines Laufwerkes ist schon weitaus komplexer. Du musst zwangsläufig einen Gerätetreiber schreiben. Du kommst nicht drumherum. Leider. Ich kenne keinen anderen Weg.
Ansonsten ist die Idee gut. Wenn man mit Lazarus arbeitet wird das Laufwerk am besten gleich > 500 MB gemacht (sofern es das System hergibt), dann kann man wenigstens den ganzen FPC und die LCL draufkopieren, sodass er nicht jahrhunderte die Units einliest. Wobei schon allein das Setzen des Ausgabepfades auf das Virtuelle Laufwerk eine menge Performance bringen dürfte, da es den Schreibzugriff vom Stick weglenkt (Sticks können nicht anständig gleichzeitig Lesen und Schreiben)
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich kenne dazu auch keine gute Lösung, die allgemein auf windows und Linux läuft aber ich hab da ein paar Ideen.
Unter Windows kannst du ja SCSI Laufwerke generieren, dies macht z.B. Daemontools und wie die netten progs heissen.
Also holt man sich die entsprechenden DLLs und mountet einfach ein ISO, diese kann man recht einfach erstellen oder schaut, ob man direkt über die Device Treiber Daten aus den Speicher mappen kann.
Unter Linux ist die ganze sache um ein vielfaches einfacher, da man dort einfach und bequem mounten kann, einfach ein iso generieren und mounten oder per mmap auf ein neues Device die Daten lenken oder eines der Kernel Tutorials schnappen, den Code daraus copy/paste und du hast ein eigenen 100Zeilen Device Treiber kopiert, welcher Datein nach aussen bereit stellt. Es gibt für linux auch diverse weitere Mechaniken und Bibliotheken, Dateisystem auf den Speicher zu transportieren.
Ein weitere Möglichkeit wäre z.B. noch über NFS oder SAMBA.
Vieleicht guckst du einfach mal, wie die LiveCD's von z.B. BartPE oder Knoppix ein File System im Speicher realisiert.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich will ja nicht unken. Aber so etwas wie Ramdrive gabe es schon unter dos 6.22. Dabei wird ein Stück Speicher als Virtuelles Laufwerk gemappt.
http://www.wintotal.de/Tipps/index.php?id=1022
Problem dabei. Die Daten müssen zu erst auf das Laufwerk kopiert werden. Und müssen von dort wieder per Hand wegkopiert werden. Sollte in der Zwischenzeit der Strom auffallen ist alles futsch. Und das ist gerade in der Softwareentwicklung ganz übel.
Es gibt aber auch so etwas wie trucrypt. Diese bieten auch Laufwerke an. Allerdings wird dort direkt in eine andere Datei geschrieben. Wenn man so etwas wirklich professionell machen wollte müsste man schon einen eigenen Treiber schreiben. Und dieser müsste im Hintergrund die Daten auf dem Stick sichern. Und zwar falls ein Stromausfall eintreten würde damit alles auch auf dem Stick ist. Eventuell könnte man das auch mit einer Art Watchdog Programm lösen was das Ramdrive überwacht und ggf. Dateien auf den Stick kopiert. Sofern diese sich geändert haben. Natürlich alles im Hintergrund. Und eventuell mit Prioritätenliste. Um Quellcodes schneller zu sichern als große große echsen. Wenn die im Eimer wären wäre das weniger schlimm als beim Quellcode. (Backups nicht vergessen.)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Braucht man da wirklich dieses Kit? Denn File System Filter wollte ich auch irgendwann mal schreiben, aber... Das wird dafür doch wohl nicht nötig sein, oder?
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
hmmm...
danke für eure antworten - ich bin sowieso am überlegen auf linux umzusteigen .. also die isos hätten meine favoritenrolle - bloß frage ich mich ob man auf gemountete isos auch was schreiben kann - weil darum ging es unter anderem auch.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Mal ne ganz blöde Frage. Was soll das mounten von ISOs genau bringen?
Ging es nicht darum die dauernden Lese und Schreibzugriffe auf den Stick zu verringern? Und wenn ein ISO von einem Stick irgendwo gemappt wird und dort gelesen und geschrieben wird. Dann ist das ja beinnahe das Selbe wie als wenn die Dateien direkt auf dem Stick liegen. Nur, dass man nicht dauern echte Dateien öffnen und schließen muss. Aber dafür hat man dann 2 Dateisysteme die verwaltet werden müssen. Ein mal das vom Stick und dann das was innerhalb vom ISO verwendet.
Also wenn Linux da nicht irgendetwas cached, dann denke ich nicht, dass es wirklich viel bringen wird. Lasse mich aber gerne eines bessere belehren.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, bei Linux kann man da dann sicherlich irgendwas machen, zumal das ja sog. Ramdisks standardmäßig unterstützt.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
@Lossy: Den denkfehler haben wir wohl dann doch (fast) alle gemacht ^^ - das mit dem mounten is letztlich also eigentlich unsinn - kann man windows irgendwie zwingen zu cachen? damit würde man das prob dann elegant umgehen....
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
grey hat geschrieben:
@Lossy: Den denkfehler haben wir wohl dann doch (fast) alle gemacht ^^ - das mit dem mounten is letztlich also eigentlich unsinn
Das war nur so ein Gedankengang von mir. Ob es sich tatsächlich auch so verhält wie ich mir das denke weiß ich nicht. Habe so etwas noch nie gemacht. Das ist aber auch das was ich damit eigentlich rausfinden wollte.
bin grad nochmal übder den gedankengang gestolpert ... wäre es vielleicht möglich über TMemoryStream was zu biegen? also man läd nen gepackten ordner (oder was auch immer) als memstream ein und bindet dann den stream als laufwerk ein. wenn das gehen würde wäre das ja ne einfache und elegante lösung..
mfg grey
Also zumindest in Linux sollte das ganze ziemlich sinnlos sein da USB-Sticks per Default im Speicher gecacht werden. Die Daten werden erst auf den Stick geschrieben, wenn man ihn unmountet.
Wenn man seine Daten unbedingt auf nem USB-Stick aufbewahren will, was an sich schon mal keine gute Idee ist (*), sollte man vielleicht nur eine komprimierte Datei (ZIP, TAR.GZ, ...) auf dem Stick speichern und wenn man arbeiten will immer erst auf die Festplatte entpacken. Wenn es darum geht mobil zu sein, sollte man sich vielleicht mal über Dateiverwaltungssystem wie SVN, CVS und ähnliches informieren.
Nicht zuletzt kann man vielleicht auch den Compilevorgang direkt optimieren. Insbesondere in der Linux Welt ist ja üblich sich ein sog. Makefile zu schreiben, welches den Compilevorgang steuert. Da ich mich in der Delphi-Welt nicht so auskenne, hier ein C++ Beispiel:
Code:
g++ Datei1.h Datei1.cpp Datei2.h Datei2.cpp ....
So muss der Compiler immer alles komplett neu compilieren. Das dauert einfach zu lange. Man kann aber sinnvoller vorgehen indem man zuerst alle *.cpp-Dateien jeweils zu einem Object-File *.o compiliert. Zuletzt werden dann noch sämtliche Object-Files zu einer ausführbaren Datei gelinkt.
Da man die Object-Files nur dann neu generieren muss, wenn sich etwas an der entsprechenden *.cpp-Datei oder den includierten Headern geändert hat, geht der Compilevorgang viel schneller.
Um noch mehr Geschwindigkeit zu kriegen sollte man in Header-Dateien darauf achten nur die Dinge im Header einzubinden die auch wirklich im Header benötigt werden. Oft kann man beispielsweise eine Forward-Deklaration machen und den eigentlich benötigten Header erst später in der *.cpp-Datei includieren. So kann man vermeiden, dass man bei kleinsten Änderungen eines Headers wieder alles neu kompilieren muss.
(*) weil die Lebensdauer von USB-Sticks nicht sonderlich hoch ist im Vergleich zu Festplatten. Insbesondere billigste USB-Sticks geben schnell den Geist auf. Das gilt vor allem für Sticks die z.B. von der Debeka kostenlos verteilt werden. Nach einmal lesen/schreiben sind die schon hinüber.
_________________ Yeah!
Zuletzt geändert von Coolcat am Di Feb 17, 2009 17:37, insgesamt 1-mal geändert.
danke coolcat - das mit linux hab ich so noch nicht gewusst ... wäre wohl wirklich ein argument auf linux umzusteigen... im endeffekt versuche ich dann ja eigentlich nur das was unter linux "normal" ist auch unter windows hinzubekommen
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.