Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 04:47

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Fr Jan 23, 2009 00:29 
Offline
DGL Member

Registriert: Mi Nov 12, 2008 18:27
Beiträge: 134
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?

hoffe ihr könnt mir helfen

mfg grey


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 11:28 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 13:38 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 14:17 
Offline
DGL Member
Benutzeravatar

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.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 19:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
To make a filesystem (virtual or not) accesible for windows you would need:
http://www.microsoft.com/whdc/devtools/ ... fault.mspx
It will cost you $109 + $25 + vat + duties.

I wonder if there are free options (not under gpl).

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 24, 2009 18:43 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 00:04 
Offline
DGL Member

Registriert: Mi Nov 12, 2008 18:27
Beiträge: 134
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.

mfg grey


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 00:28 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Unter Linux kannst du auch einfache Files mounten, soweit ich weiß. (Oder lieg ich da daneben?)

Somit bräuchtest du unter Lnx dir keine sorgen zu machen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 09:22 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 10:51 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 15:30 
Offline
DGL Member

Registriert: Mi Nov 12, 2008 18:27
Beiträge: 134
@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....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 27, 2009 16:01 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 17, 2009 14:48 
Offline
DGL Member

Registriert: Mi Nov 12, 2008 18:27
Beiträge: 134
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 17, 2009 15:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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:
  1. 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! :mrgreen:


Zuletzt geändert von Coolcat am Di Feb 17, 2009 17:37, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 17, 2009 16:01 
Offline
DGL Member

Registriert: Mi Nov 12, 2008 18:27
Beiträge: 134
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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]