Laden...

Speicherauslastung reduzieren

Erstellt von John Doe vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.704 Views
John Doe Themenstarter:in
149 Beiträge seit 2005
vor 17 Jahren
Speicherauslastung reduzieren

Hallo Leute!

Ich bräuchte da mal einen kleinen Gedankenstoß. Ich arbeite hier gerade an einem Syntaxhighlighter, der einige Sprachen unterstützen soll.
Die Daten für die Formatierung bekomme ich aus einer gemeinsamen XML-Datei. Allerdings umfasst allein PHP schon an die 2500 Funktionen. Selbst ein string[] nur aus den Funktionsnamen (ohne Formatierungseinstellungen) umfasst dann schon ca. 10 MB. Wenn man noch die Einstellungen für die Formatierung hinzurechnet ist das schon viel zu viel. Und das nur bei einer Sprache.

Also fällt diese Möglichkeit dann schon mal flach.

Mein nächster Ansatz war OnDemand die Werte aus der XML-Datei abzufragen, und nur alle schon geladenen Datensätze im Speicher zu halten. Das würde die Auslastung natürlich erheblich verringern. Aber ich befürchte, das das bei langsameren Rechnern erhebliche Performanceeinbuße zur Folge hat.
Eine andere Alternative wäre, häufig verwendete Funktionsnamen in der XML-Datei mit einem Flag zu versehen, und die dann schon mal zu laden.
Aber nach welchen Kriterien sollte man die aussuchen?

Vielleicht hat einer von euch eine andere Idee wie man das Problem umgehen kann?

vg,

Schon als Kindern war uns klar: Jeder von uns wird ein Star, oder Millionär - das ist doch auch nicht schwer. Dem Alkohol nicht abgeneigt, war es für uns auch nicht leicht. Durch seine Hände Arbeit, wird man auch nicht gleich ein Scheich.
49.485 Beiträge seit 2005
vor 17 Jahren

Hallo John Doe,

ich würde deine Grundannahme in Frage stellen wollen. Ich kann mir nicht vorstellen, dass ein String-Array soviel verschlingt. Ich würde bei 2500 Einträgen mit max. 250.000 KB rechnen. Aber davon abgesehen: was wären heutzutage schon 10 MB?

Außerdem brauchst du doch nur die Werte der Sprache im Speicher, die du gerade "highlightest".

Ich würde die Namen sowieso als Keys eines Dictionarys speichern, damit eine schnelle überprüfung möglich ist, ob ein Wort ein Funktionsname ist (ContainsKey).

herbivore

John Doe Themenstarter:in
149 Beiträge seit 2005
vor 17 Jahren

Original von herbivore
ich würde deine Grundannahme in Frage stellen wollen. Ich kann mir nicht vorstellen, dass ein String-Array soviel verschlingt. Ich würde bei 2500 Einträgen mit max. 250.000 KB rechnen. Aber davon abgesehen: was wären heutzutage schon 10 MB?

Außerdem brauchst du doch nur die Werte der Sprache im Speicher, die du gerade "highlightest".

Da mein Editor mehrere Dateien gleichzeitig offen haben kann (die im Extremfall andere Sprachen zum highlighten beinhalten) summiert sich das dann doch schon ganz schön.
Mit der Größe habe ich gerade nochmal nachgeschaut. Hier auf meinem NB ist die Auslastung nur etwa halb so groß wie auf meinem anderen Rechner. Komisch. Naja, da werde ich nochmal genau nachschauen.

Allerdings ist das ja immer noch nur die Funktionsnamen, ohne Formatierungseinstellungen. Die Einstellungen sollen für jede Funktion(sgruppe) einzeln definierbar sein. Was im Extremfall dann auch 2500 verschiedene Einstellungen wären, die man auch draufschlagen müsste.

An und für sich sind 10 MB nicht viel - aber wenn man bedenkt, das auf den Rechnern evtl. nicht 1 GB RAM drin sind, sondern nur 128 MB oder so, dann kann man sich nicht zwingend einen 30 MB verbratenden Editor noch leisten.

Ich würde die Namen sowieso als Keys eines Dictionarys speichern, damit eine schnelle überprüfung möglich ist, ob ein Wort ein Funktionsname ist (ContainsKey).

Klar, werde sowieso eine Dictionary nehmen. Habe es mit beidem (Array und Dictionary) ausprobiert. Die Auslastung vom Dictionary lag nur unwesentlich höher.

Werde warscheinlich eine Mischung aus Vorladen und OnDemand-Laden verwenden. Oder das konfigurierbar machen.

Schon als Kindern war uns klar: Jeder von uns wird ein Star, oder Millionär - das ist doch auch nicht schwer. Dem Alkohol nicht abgeneigt, war es für uns auch nicht leicht. Durch seine Hände Arbeit, wird man auch nicht gleich ein Scheich.
49.485 Beiträge seit 2005
vor 17 Jahren

Hallo John Doe,

An und für sich sind 10 MB nicht viel - aber wenn man bedenkt, das auf den Rechnern evtl. nicht 1 GB RAM drin sind, sondern nur 128 MB oder so, dann kann man sich nicht zwingend einen 30 MB verbratenden Editor noch leisten.

ich würde mal die These wagen, dass .NET-Programme für Rechner mit 128MB ohnehin nur bedingt geeignet sind. .NET ist ein Speicherfresser. Ansonsten könntest du das im Editor konfigurierbar machen, ob Funktionsnamen überhaupt hervorgehoben werden sollen.

Und dann noch eins, die Anzeige im Taskmanager sagt wohl nur bedingt etwas über den tatsächlichen Hauptspeicherverbrauch aus. Ich kann das nicht näher begründen, aber da gab es schon ein paar Threads zu.

herbivore

John Doe Themenstarter:in
149 Beiträge seit 2005
vor 17 Jahren

Ich habe mich jetzt (vorläufig) entschieden. Das Syntaxhighlighting wird natürlich deaktivierbar sein. Das Laden der Daten mache ich konfigurierbar mit den Optionen das immer alle geladen werden, oder nur die wichtigsten, oder nur die, die gebraucht werden.

Wenn noch was ist, dann melde ich mich wieder.

Danke schonmal,

John Doe

Schon als Kindern war uns klar: Jeder von uns wird ein Star, oder Millionär - das ist doch auch nicht schwer. Dem Alkohol nicht abgeneigt, war es für uns auch nicht leicht. Durch seine Hände Arbeit, wird man auch nicht gleich ein Scheich.