Autor Beitrag
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 10.03.05 18:34 
Was meint ihr? Bis zu welcher Größe ist es verantwortlich die Programmdaten in der Registry abzulegen? Ich habe gerade ein bisschen umgebaut und dynamische Daten, für welche ich immer Extradateien angelegt habe in die Registry gespeichert. Wenn ich den Unterbaum des Programms exportiere (.reg) ist die Datei schon 100kb gross (sind auch fast 2000 Variablen bzw. Einstellungsoptionen).
demo88
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 160

Ubuntu 6.04, Win XP
Delphi 7
BeitragVerfasst: Do 10.03.05 19:27 
Also ich mach das immer so:

Bei kleinen Programmen die man vllt mal schnell deinstalliert etc. speicher ich das in der registry. damit wenn man das Programm nochmal installiert die ganzen Daten noch hat.

Wenn es ein Programm größeres Programm ist (so was wie Photoshop oder so 8) ) speicher ich das lieber in Dateien.
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 11.03.05 12:41 
Naja, die Frage ist eigentlich mehr, was man alles in der Registry abspeichern darf. Theoretisch kann man ja Bilder und andere größere Binaries ablegen. Leider ist die Registry kein richtig gutes Datenbank-System und wird schnell langsam.

Wenn man viele dynamische Daten abzuspeichern hat und zu faul ist ein ordentliches Dateiformat zu entwickeln kann man ja jedes der Datenpakete in einer eigenen Datei abspeichern, ist aber auch nicht schön.
Harry Hunt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 50



BeitragVerfasst: Fr 11.03.05 12:52 
Wie wär's denn mit INI-Dateien oder XML? So mach ich das in der Regel. Davon, größere Datenmengen in der Registry abzulegen würde ich abraten. 100kb scheinen mir auch schon deutlich zuviel zu sein. Eine sehr große Registry wirkt sich ja nicht nur nachteilig auf die Performance deines Programmes aus, sondern praktisch auf das ganze Betriebssystem und alle Programme, die irgendwie auf die Registry zugreifen.

XML scheint mir da eine wirklich gute Lösung zu sein, weil du damit deine Daten hierarchisch anlegen kannst. Und mit XPath ist der Zugriff genauso einfach wie auf Daten in der Registry.
Einige große Softwarehersteller wie Adobe oder Macromedia speichern ihre Einstellungen schon teilweise in XML-Files. Diese liegen normalerweise unter Dokumente und Einstellungen\Anwendungsdaten\...
Somit kann man die Daten auch Benutzerspeziefisch speichern.
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 14.03.05 01:57 
Nunja, wenn ich den ganzen Software-Branch exportiere sind das 15MB, und ich habe nicht viel installiert. Ich will auch nicht bei jeder kleinen Änderung die komplette XML-Datei neu speichern lassen, die Registry ist immer geöffnet.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.03.05 10:46 
user profile iconSpaceguide hat folgendes geschrieben:
Nunja, wenn ich den ganzen Software-Branch exportiere sind das 15MB, und ich habe nicht viel installiert.

Sprichst du vom Export per RegEdit in eine Textdatei? Dann vergleichst du Äpfel mit Birnen, weil die Informationen in dem Fall in ein les- und nutzbares Format (REG-Datei) umgewandelt werden. Dass sie dabei vermutlich etwas größer werden als in ihrer binären Form, dürfte auf der Hand liegen.

Zitat:
Ich will auch nicht bei jeder kleinen Änderung die komplette XML-Datei neu speichern lassen,

Was machst du denn bei der Registry? Was passiert, wenn der Anwender in deinem Programm bspw. den Status einer Checkbox ändert? Besitzt du eine eigene Funktion, in der der neue Status (Haken oder nicht) in die Registry geschrieben wird? Oder hast du eine zentrale Funktion, in der alle Optionen überprüft und bei Änderungen neu gespeichert werden? Ob du nun alle Optionen in die Registry schreibst, oder ob du eine neue XML-Datei erzeugen lässt, das ist im Prinzip das gleiche.

Zitat:
die Registry ist immer geöffnet.

Für Windows sicher, aber für dein Programm? Schau dir mal die Registry-Funktionen an.
Harry Hunt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 50



BeitragVerfasst: Mo 14.03.05 11:08 
Ich speicher die Änderungen an meinen XML-Dateien immer, wenn das Programm geschlossen wird. Aber selbst wenn ich die Änderungen dann speichern würde, wenn Sie passieren, ist das kein großes Problem, weil ich da ja letztlich nur ein mal den Baum meines XML-Docs durchlaufen muss. Das ist vielleicht langsamer als Änderungen an der Registry zu machen, aber nicht wesentlich.
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 14.03.05 16:10 
Natürlich ist die Größe des Exports eines Branches nicht als absolute Größe anzusehen, Binärdaten werden z.B. auf das Dreifache aufgebläht (Hex als String und die Kommata), andererseits ist die Registry auch kein einfacher Heap, sondern besitzt bestimmt eine Menge Strukturdaten und Indizes.

Ein Beispiel, was z.B. ich in der Registry speichere, sind z.B. Farbtabellen:

blanchedalmond REG_SZ FFEBCD

Die aktuelle wird beim Öffnen des Farbauswahldialogs aus der Registry geholt und beim Schliessen werden die geänderten aktualisiert. Daneben hab ich natürlich noch Farbtabellen, die ich auf der Platte als Datei halte. Vorher hab ich immer eine Custom-Farbtabelle mitgeführt, aber zusammen mit den ganzen anderen Custom-Dateien (Palette, Hotkeys etc. pp) gab das einen ziemlichen Dateiwust.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.03.05 18:51 
Und warum speicherst du die Farbwerte als String (REG_SZ)? Wie dem auch sei, in einer XML-Datei ließen sich solche Werte natürlich auch problemlos speichern:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
<colortable>
  <color name="blanchedalmond" value="FFEBCD"/>
  <color .../>
  <color .../>
  <!-- ... -->
</colortable>

Und dank Suche in: Delphi-Forum, Delphi-Library XPATH lässt sich der Farbwert jederzeit während des Programmlaufs auslesen und anpassen, ohne dass man die zu Grunde liegende XML-Datei ständig speichern müsste. Das kann man dann, wie Harry Hunt schrieb, einmal beim Beenden machen.