AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte himXML (gesprochen himix ML)
Thema durchsuchen
Ansicht
Themen-Optionen

himXML (gesprochen himix ML)

Ein Thema von himitsu · begonnen am 12. Mär 2009 · letzter Beitrag vom 11. Nov 2020
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#10

Re: himXML (gesprochen himixML)

  Alt 1. Mai 2009, 01:34
so, nun ist auch das En-/Decoding nehezu komplett überarbeitet worden
(unvollständige MultiByte-Zeichen erkennen)
und auch die Speicherprozedur würde etwas gendärt ... nur blöd, daß die Dekodierung garnicht sooooo langsam war ... aktuell nur etwa 60-70 ms für's Dekodieren und Speichern ... das Meißte an Plus wurde durch 'ne winzig kleine Änderung rausgeholt .... ich hatte ausversehn nach jedem Node ein Flush (Schreibpuffer leeren) drin ... also so etwa 35 Dekodier-/Speicheroperationen wurde dieses über 100.000 Mal in sehr kleinen Stücken gemacht
ja und Node.Next war sehr disoptimal (2-3 Sekunden für .Next und nochmal knapp 7-8 für's Flush)

hier nochmal die Testergebnisse für 100.000 Nodes (ergibt ca. eine 1,5 MB-Datei)
Code:
[b]alt[/b]
TXMLDocument = fill:672687  save: 391  free: 140
TXMLFile    = fill:  125  save:10922  free:3110


[b]TXMLDocument/IXMLDocument[/b]
Taskmanager: 11,5 Minuten mit bis zu 138 MB Speicherverbrauch
fill:692875  save:360  free:125

[b]himXML[/b]
Taskmanager: 3 Sekunden mir nur 22 MB
fill:110  save:125  free:2812

(Zeiten in Millisekunden)
aktueller Code kommt mit dem nächten Update und eventuell schon zusammen mit der Leseroutine (LoadFromFile und Co.)

[add]
so, noch 'ne kleine Änderung in NodeList.Clear
(einfach alles löschen und zusammen entfernen, statt einzeln entfernen und löschen)

Delphi-Quellcode:
// alt
Procedure TXMLNodeList.Clear;
  Begin
    While _Nodes <> nil do DeleteNF(_Nodes[0]);
  End;

// neu
Procedure TXMLNodeList.Clear;
  Var i: Integer;

  Begin
    If _Nodes <> nil Then
      Try
        For i := High(_Nodes) downto 0 do FreeAndNil(_Nodes[i]);
        _Nodes := nil;
      Except
        i := Length(_Nodes);
        While (i > 0) and (_Nodes[i - 1] = nil) do Dec(i);
        SetLength(_Nodes, i);
        Raise;
      End;
  End;
Ergebnis:
Code:
create:0  fill:109  save:125  free:31
also 0,26 Sekunden, statt über 11 Minuten bei MSXML (TXMLDocument), um 100.000 Nodes einzufügen und diese 1,5 MB-Datei zu speichern
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
xml - MSXML alternative - Stack Overflow This thread Refback 28. Jun 2011 15:34

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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