![]() |
Grenzen von INI
Alles was ich gefunden habe ist schon etwas älter, deshalb wollte ich es noch mal kurz ansprechen. Evtl. gibt es inzwischen neue Erkenntnisse.
Ich überlege in einem Programm mehrere INIs zu einer zusammen zu fügen. Grund ist, dass es auf langsamen System u. U. bis zu einer halben Sekunde dauert bis alles eingelesen ist und das Programm somit starten kann. Das ist nicht lange, aber entweder ich lasse es so und man wundert sich über die lange Ladezeit, baue ein Splashscreen ein damit man sieht, dass da etwas geladen wird, oder ich packe mehrere INIs zu einer INI. Dann wird nur eine Datei geöffnten. Das geht schneller. Die Frage ist wie es nun mit der Größe der INI aussieht. Liegt die Begrenzung immer noch bei 64 KB oder ist das das Schnee von gestern? Wenn ja, auf Welchen Systemen gibt es welche Begrenzungen? Ich meine Win 9x, NT, XP, usw. (falls es einer weiß). Ich hab gerade eine 2 MB große INI erstellt. System XP und Delphi 7. Also bei XP scheint es kein 64 KB grenze zu geben. Die frage ist, seit wenn gibt es die nicht. Das andere ist die länge des Strings der gespeichert werden kann. Ich hab 2047 Byte gezählt. Ist das korrekt, gibt es eine Möglichkeit über die Grenze zu speichern? |
AW: Grenzen von INI
Die 64 K Grenze gibt es spätestens seit D7/XP nicht mehr. Bei TIniFile weiß ich's nicht genau aber bei TMemIniFile können die Strings beliebig lang sein. Schneller sind INI's mit kleinen Abschnitten. (Also besser viele Sections mit wenig Einträgen als wenig Sections mit vielen Einträgen).
|
AW: Grenzen von INI
Hi,
Json ist das neue Ini! Vorteile Json gegenüber Ini: * Mehrzeilige Strings kein Problem * verschachtelte Hierarchien kein Problem * Arrays,... kein Problem * Du hast deine Einstellungen gleich in einer Klasse gekapselt. Du brauchst lediglich einen Parser dazu, bei neueren Delphis (ich glaube ab XE6) ist ja einer von Haus aus verfügbar. Grüße |
AW: Grenzen von INI
Zitat:
Weiterhin frage ich mich, was Du alles in den INI-Dateien drin hast. Wenn es sich um viele gleichförmige Daten handelt, die auch in einer Tabelle platz fänden, käme ein ClientDataSet oder eine kleine Desktop-DB in Frage. Zu ewig langen Konfigurationsdateien (ob nun XML, JSON oder was-weiss-ich) würde ich abraten, dann ist eine DB vermutlich die bessere Wahl. Was für Daten legst Du denn in so einer INI ab? |
AW: Grenzen von INI
Wo ist denn das Problem mit dem Splash-Screen?
Form anzeigen, in einem Thread die Ini-(oder in welchem auch immer gearteten Format-)Daten laden und beim Beenden des Threads die Form wieder entsorgen. Fettich. Das ist kein Aufwand sondern eine Fingerübung zum warm werden. |
AW: Grenzen von INI
Problem mit Splashscreens gibt es dann, wenn es Probleme gibt.
Ich weiß nicht, was Dejan Vu meint, aber ich find sie nur erträglich, wenn alles glatt geht. Ist vielleicht auch ne Frage, wie gut die gemacht sind. Erfahrungswerte zeigen, dass sie im Problemfall eher stören und es gibt mindestens ein Programm, für dass ich schon nach command line Schaltern gesucht hab, um sie auszublenden. Eigenartige StayOnTop Einstellungen, die dafür sorgen, dass die Fehlermeldungen aus dem Ladeprozess überdeckt werden, sodass sich die Form selbst blockiert. |
AW: Grenzen von INI
Hmmm, Exceptions die in einem Thread auftauchen muss ich aktiv zur Anzeige bringen.
Und ja, erst wenn ich es richtig mache, dann funktioniert es richtig ... ist das nicht immer so? |
AW: Grenzen von INI
Zitat:
|
AW: Grenzen von INI
Zitat:
![]() |
AW: Grenzen von INI
Es gab da meine ich auch mal einen SkillSprint oder sowas dazu, ich meine das war der
![]() Edit: Wo war die rote Box? Naja zumindest ist es nicht der selbe Link :) |
AW: Grenzen von INI
Zitat:
und alles was mit JSON geht, geht auch mit XML (und mehr). Jenachdem, was man mindestens benötigt, nimmt man Einwas davon, was Dieses unterstützt. PS: Registry ist das neue INI. |
AW: Grenzen von INI
Zitat:
Zitat:
|
AW: Grenzen von INI
Nenne mir bitte zwei ernsthafte Programme, die in weniger als 0,5 Sekunden geladen sind. Das ist ja schon die Zeit, die es braucht, bis die Exe aus dem Fileserver geladen wurde. Ich dachte ernsthaft, das wäre ein Fehler von Dir gewesen und du meintest Minute statt Sekunde...
Sherlock |
AW: Grenzen von INI
Zitat:
Ein Herzschlag ca. 1 Sekunde. Die Zahl "21" dient als Hilfe, eine Sekunde zu "messen". Ob bei diesen Zeiten eine halbe Sekunde wirklich ausreicht, um sich zu fragen, ob das Programm schon gestartet ist, bezweifle ich ganz stark. Ab 2 Sekunden würde ich dir vielleicht Recht geben. Es gibt übrigens auch einfache Mittel, einen Mehrfach-Start eines Programmes zu verhindern (Stichwort Mutex). Ich würde eher das Start-Verhalten grundsätzlich ändern. Die Ini-Datei kann vermutlich auch nach dem Start geladen werden. Möglicherweise auch in einem Thread. Eine Sanduhr während des Ladevorgangs der Ini-Datei kann auch ausreichen. Ein Splash-Screen der kaum eine halbe Sekunde sichtbar wäre, halte ich für nicht sonderlich sinnvoll. Da blitzt dann höchstens etwas kurz etwas auf. |
AW: Grenzen von INI
@Jasocul
Dann lass es nicht 05 s, sonder 1 s sein. Es ist eine merkbare Verzögerung. Und Mutex kenne ich auch, es geht aber nicht dadrum. Zitat:
Letztendlich sind die INIs das Problem. Ich muss mehre INIs öffnen, das kostet Zeit. Alles in einer INI und man würde es nicht merken. |
AW: Grenzen von INI
Zurück zur Ausgangsfrage:
Irgendwo existiert da diese ominöse Grenze,(hier gab's mal was dazu) weil ein veraltetes API für die Zugriffe auf das .INI-File genutzt wird. Darum ist Deine Idee mit dem großen INI-File auch nicht soo gut weil dann die Zugriffe noch länger dauern. (Immer vorrausgesetzt ich erinnere mich richtig!) Gruß K-H doch noch gefunden: ![]() |
AW: Grenzen von INI
Ich glaube mich zu erinnern, dass es zu Total Commander Diskussionen gab, warum denn bestimmte Einträge nicht gelesen wurden (war schon irgendein NT-basierendes OS, vermutlich Win2k oder XP). Als mögliche Ursache wurde dann eine Grenze von 64 KiB pro Abschnitt/Section angegeben und nach Verkleinerung einer Section unter diesen Wert lief alles wieder.
Ich weiß nicht, ob das auf aktuellen Windows-Versionen noch relevant ist, aber man kann das ja mal ausprobieren, aber zumindest im Hinterkopf behalten. MfG Dalai |
AW: Grenzen von INI
Zitat:
![]() Ich finde ![]() |
AW: Grenzen von INI
INI, über die INI-WinAPI, wurde in einen 64-KB-Puffer (eine komplette Speicherseite im virtuellen Arbeitsspeicher) eingelesen und da drin verarbeitet (und das bei jedem einzelnen Lese/Schreibzugrif jedes einzelnen Wertes komplett von Vorne)
Lösung: TMemIniFile (das benutzt nicht diese API und ist auch noch schneller) INI hat aber einen Vorteil, da dort jede Zeile einzeln analysiert wird, ist es der API egal, ob die Datei kaputt ist (also in der Datenstruktur), denn solange die SectionZeile und die eine WertZeile bis zum
Delphi-Quellcode:
OK sind, kann dieser Wert auch ausgelesen werden.
=
|
AW: Grenzen von INI
Eigentlich bin ich jemand der immer gleich auf den Hype-Train aufspringt. Wenn etwas neu ist, ist es gleich cool und automatisch besser als das alte Gegenstück.
Nichts gegen JSON, sein Siegeszug ist verdient. Aber ich kann mich weiterhin nicht damit anfreunden, einfache Anwendungseinstellungen jetzt statt in einer flachen .ini-Datei in einer hierarchischen JSON-Datei abzulegen. Ich habe oft die Situation dass beim Kunden vor Ort noch etwas angepasst werden muss. Und jeder nicht allzu PC-versierte Techniker kann eine ini-Datei bearbeiten. XML oder JSON bringt solche Leute zur Verzweiflung. Deshalb sehe ich weiterhin immer davon ab. |
AW: Grenzen von INI
Zitat:
Ich würde immer noch gerne wissen, was das denn für Einstellungen sind, die über mehrere INI-Dateien verteilt sind und mehr als 0,5 Sekunden benötigen (auf langsamen Systemen), bis sie geladen sind. Ich kann mir vorstellen, zur Not eine ![]() Die Registry würde ich im Übrigen nicht mit so vielen Einstellungen zumüllen, aber das ist vielleicht auch Anssichtsache. ![]() |
AW: Grenzen von INI
OK, einmal noch, dann bin ich ruhig :tongue: :mrgreen:
Zitat:
![]() Umfangreiche XML-Dokumente per Hand (Texteditor) editieren ist einfach ätzend. JSON ist da angenehmer, dabei fallen aber viele Vorteile von XML weg (Tool-Unterstützung) ... und angenehm geht auch anders. |
AW: Grenzen von INI
Zitat:
@Der schöne Günther Der Grund wieso ich immer noch gerne Ini nutze, mal davon abgesehen, dass es sich bei dem oberen Beispiel nur um Daten handelt, die man auch anders hätte speichern können, ist, dass man mit zwei oder drei Handgriffen alles sofort in die Registry verfrachten kann. Delphi acht den Wechsel zwischen Ini und Registry sehr einfach. |
AW: Grenzen von INI
Zitat:
Aber: Blöd, das Du keine meiner Vorschläge auch nur im Ansatz in Erwägung und andere Dinge eh nicht in Betracht ziehst, vor allen Dingen diesem neumodischen Krimskrams wie JSON oder TOML. Dann bleib bei INI und verwende es als Datenspeicher. Dann musst du eben mit der immensen Ladezeit leben. Bau einen Splash dazu und biete noch ein Schnellschachspiel an, damit man die Wartezeit sinnvoll überbrücken kann :lol: |
AW: Grenzen von INI
Dejan Vu, Regel #1 ist: mach es einfach. Warum also Daten die man mit Gruppe/Name/Wert zuordnen kann, komplex speichern? Man kann was anderes nehmen, man kann dafür auch IniFile nehmen. Und zweitens, das Ini Format kann jeder selbst nach 40 Jahren verarbeiten. Zur Not geht das mit einem Notepad.
Und drittens, die Daten werden schon seit geraumer Zeit gespeichert. Eine Entscheidung ob man vielleicht was anderes nimmt, ergibt sich nicht. Das kann man in Zukunft machen, hier nicht mehr. Und viertens, eine Umstellung auf eine Datei ist mit drei Zeilen Code erledigt. Und fünftens, ich bin stets offen für neumodischen Krimskrams. Nenne mir eine JSON Unit die in Delphi 7 funktioniert, und ich arbeite in Zukunft damit. Und sechstens, trink einen Kamilletee. Sowas ist nicht wert sich aufzuregen. Die Welt ist kompliziert genug. |
AW: Grenzen von INI
Zitat:
Offenbar ist es nicht so einfach oder keine Selbstverständlichkeit, das richtig zu machen. Hängt natürlich auch stark davon ab, was technisch in der Zeit alles passiert. Von einem der genannten Programme weiß ich, dass es Delphi ist, aber Einblicke habe ich da natürlich nicht. Mein Beitrag sollte eher als Hinweis dienen, den "Aufwand" für Splash dann bitte auch richtig einzuschätzen und es ordentlich zu machen. Das Entsetzen, für max 0,5 Sekunden Wartezeit ein Splash zu spendieren teile ich nicht. Je anspruchsvoller desto besser. Software darf auch Spaß machen, wenn es kein Game ist. Ich hab eher den Verdacht, dass einige hier ein schlechtes Gewissen bekommen, wenn jemand für ein paar Wimpernschläge so einen Aufwand treibt. |
AW: Grenzen von INI
Also ich halte es immer so: Wenn ich nach der Grenze von irgendwas fragen muss, dann mache ich was falsch. Weil in der Regel ist Windows so ausgelegt, dass man äußerst selten an irgendeine Grenze stößt.
Alternativ nimm einfach eine Textdatei und entwickle eine eigen Datenstruktur. da du bisher mit Ini-Dateien gearbeitet hast, kann die Datenstruktur nicht so komplex sein. |
AW: Grenzen von INI
Zitat:
![]() |
AW: Grenzen von INI
Zitat:
Finde ich ehrlich gesagt überraschend, das hier so zu lesen, wo gern schon mal auf Ebene von Variablen um Bits, Bytes, Integers gestritten wird. |
AW: Grenzen von INI
Zitat:
Zum Ursprungsproblem: Bist du dir sicher das die Inidateien als Datei das Problem darstellt? Hast du ein Profiling mit AQTime und Co. durchgeführt. Oft kommt man dann dahinter das nicht die Datei das Problem darstellt sondern die Programmierung drum herum? So hat es bei uns merklich was gebracht an relevanten stellen const bei den Parametern zu definieren so das (an Zentralen Funktionen die Mio.-Fach aufgerufen werden) das Kopieren von Strings (Arbeiten unter D6 mit WideString, beim normalen String dürfte das zwar auch merklich sein, aber nicht so stark) ein bremsende Aktion war. |
AW: Grenzen von INI
Zitat:
Was ich aber nicht weiß ist, seit wann das so ist, d. h. ob ich eine Einschränkung für Windowsversion mit einbauen soll, bzw. ob sich das lohnt, usw. @DeddyH Danke, werde es testen. Der erste Test sieht aber nicht gut aus, da gibt es Fehlermeldungen. Ich werde aber prüfen ob ich es umprogrammieren kann |
AW: Grenzen von INI
Zitat:
Es könnte sein das Win9x die noch hat, aber in 2015 ist Win9x eh irrelevant (oder soll dein Programm noch für die potentiellen 3 User sein die noch 95 installiert haben?). |
AW: Grenzen von INI
Zitat:
Letztendlich geht es weniger um das aktuelle Programm, es geht vielmehr um die Grenzen zu kennen, bzw. wann es welche gab. Aktuell gibt es keine oder sie können umgangen werden. |
AW: Grenzen von INI
Zitat:
Zitat:
Zitat:
|
AW: Grenzen von INI
Zitat:
|
AW: Grenzen von INI
Zitat:
|
AW: Grenzen von INI
Hallo Popov,
INI-Dateien steht für Initialisierungsdatei diese sind eigentlich für Einstellungen des Programms mal von MS eingeführt worden. Wenn Du sowieso mehrere INI-Dateien hast vielleicht ist es möglich diese erst aufzurufen, wenn sie konkret gebraucht werden. Wenn es normale Daten sind und Du keine DB verwenden willst würde ich einen TFileStream benutzen. Bis bald Chemiker |
AW: Grenzen von INI
Hallo Chemiker,
ich weiß was Ini bedeutet und ich weiß auch, dass es eigentlich für Einstellungen gedacht ist. Man kann damit aber auch sonstige Informationen speichern. Und bevor mir noch einer sagt, dass für sowas eigentlich Datenbanken gedacht sind, nun, bevor ich eine Server aufsetze oder sonstige DLLs einbauen muss usw., nur um etwas Simples zu speichern... Aber bevor mir einer hier Resistenz gegen gute Tipps vorwirft, auch wenn ich über einiges diskutiere, so setzte ich viele Tipps dann doch um. Das mit den 0.5 Sekunden war übrigens nur geschätzt, ich hab es dann nachgemessen, es waren 1,844 Sekunden. Dann habe optimiert (nur zwei Zeilen) und es wurden 0,186 Sekunden. Dann noch mehr optimiert (dieses Mal 32 Zeilen) und es wurden 0,177 Sekunden. Und das auf einem alten langsamen System. Damit kann ich leben. Also vielen Dank für die guten Tipps, die waren nicht umsonst. Gelegentlich inspirieren sie einen zu paar Änderungen. |
AW: Grenzen von INI
Zitat:
![]() |
AW: Grenzen von INI
Ich hab zuerst den 32 Zeilen Code geschrieben. Da habe ich nach einer Logik geprüft welche Daten es geben kann und welche nicht. Wenn x gleich y ist, kann es die Daten geben, ist es dagegen z, kann es die Daten nicht geben. So in etwa. Also kann man sich auch den Zugriff sparen, der einem sowieso nur sagt, dass es die Daten nicht gibt. Das spart Zeit.
Damit habe ich tatsächlich den Zugriff von 1,844 auf 0,422 reduziert. Dann hatte ich die Idee, weil irgendwer es mal eingeworfen hat, TMemIniFile statt TIniFile zu nehmen. Der Hinweis war in einem anderen Zusammenhang, aber da ich an der Stelle nur lesen mußte, reichten zwei Änderungen. Das brachte den Rest, bzw. die 32 Zeilen Änderung wurden fast unwichtig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz