![]() |
Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Hallo DP !
Ich habe eine sehr simple Anwendung erstellt mit nur 4 Komponenten: - TWebbrowser - TButton - TStatusBar - TTimer Eine Funktion zur Ermittlung der Hauptspeichernutzung des eigenen Programms:
Delphi-Quellcode:
Ich navigiere per button zu meiner XML Datei (ca. 5,6 MB):
function getMyMemoryUsageInKb : integer;
var pmc: PPROCESS_MEMORY_COUNTERS; cb: Integer; begin cb := SizeOf(_PROCESS_MEMORY_COUNTERS); GetMem(pmc, cb); pmc^.cb := cb; if(GetProcessMemoryInfo(GetCurrentProcess, pmc, cb))then result := pmc^.WorkingSetSize div 1024 else result := -1; FreeMem(pmc); end
Delphi-Quellcode:
Der Timer zeigt mir nur die RAM-Auslastung an:
webbrowser1.Navigate('http://www.dragonlords.info/dev/big.xml');
Delphi-Quellcode:
Mehr macht diese Anwendung nicht. Das erschreckende daran ist, sie nutzt ca. 750-800 MB Hauptspeicher !
Statusbar1.Panels[0].Text := 'RAM: '+ FLoatToStr(Ceil(getMyMemoryUsageInKb/1024)) + ' MB';
Ich möchte aber mehrere XML Dateien ähnlicher Größenordnung nacheinander untersuchen, jedoch schmiert mir die Entwickler-VM aufgrund zu wenig Hauptspeicher ab. Der IE 11 des Betriebssystems addressiert bei diesem Seitenaufruf ca. 220MB und wächst in kleinen Schritten bis ... weiß nicht genau, bei 280MB habe ich ihn geschlossen. Wie kann man denn solche großen XML files untersuchen ohne den RAM Bedarf der eigenen Anwendung auf Gigabytegröße anwachsen zu lassen ? ![]() |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Grade mal ausprobiert. Ja, wird riesig. Warum? Keine Ahnung.
Aber warum in aller Welt will man das tun? Die XML in einem TWebBrowser anzuzeigen wird ja nicht dein eigentliches Ziel sein. Wenn du nur zu Debugzwecken den Text irgendwo haben willst, nimm doch ein TMemo. Willst du die XML auswerten, mach das doch über
Delphi-Quellcode:
. Das braucht dann keine 20MB Hauptspeicher (zumindest bei mir).
Xml.XmlIntf.IXMLDocument
Hey, Sankt Augustin. |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Hi,
ich muss das XML nicht im Browser darstellen, ich brauch das reine XML in einem TMemo. Das hab ich folgendermaßen gebaut: WebBrowser1DocumentComplete:
Delphi-Quellcode:
var
xml:WideSstring; doc: OleVariant; doc := Webbrowser1.Document; xml := doc.XMLDocument.xml; Memo1.lines.add(xml); |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Den TWebbrowser habe ich nie benutzt, lehne mich aber soweit aus dem Fenster zu behaupten dass der vollkommen fehl am Platz ist.
Wenn du die XML von einer URL laden willst kannst du
Zu 2):
Delphi-Quellcode:
unit Unit2;
interface uses System.Classes, Vcl.Forms, Vcl.StdCtrls, Vcl.Controls, Xml.XmlIntf; type TForm2 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); protected var myXmlDocument: IXMLDocument; end; var Form2: TForm2; implementation uses Xml.XmlDoc; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin myXmlDocument := LoadXMLDocument('http://www.dragonlords.info/dev/big.xml'); end; procedure TForm2.Button2Click(Sender: TObject); begin Memo1.Lines.Assign(myXmlDocument.XML); end; end. Das Einfügen in die Memo dauert ewig. Ich denke das liegt daran, dass deine 5MB-Datei nur aus einer einzigen Zeile besteht. Selbst Notepad++ bekommt hier Performance-Probleme. Das habe ich bei Notepad++ noch nie gesehen! Spendier der XML doch Zeilenumbrüche. |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Zitat:
![]() Ich will zur Pizzabude gegenüber und statt den Roller nehm ich lieber einen 70-Tonner, mit großer Ladefläsche für die Pizza. |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Hallo,
ich musste gerade etwas schmunzeln, als ich die Überschrift gelesen habe. Ich kämpf(t)e auch mit den XML-Dateien und bin schon mehrfach an 3 GB Hauptspeicherverbrauch 'gestorben'. Wir verwenden teilweise eigene XML-Routinen, teilweise abgeleitet von ThaXML und teilweise abgeleitet von ![]() Mein Programm: - erzeugt 4 bis 5 XML-Dateien mit jeweils über 780.000 Zeilen (mit Zeilenumbrüchen !) - jede XML-Datei hat eine Größe von ca. 65 MB - das erzeugen einer XML-Datei dauert zur Zeit etwa 40 Minuten (alles im Hauptspeicher) - jede XML-Datei in eine Textdatei konvertieren - die Textdatei hat eine Größe von ca. 5 MB - das erstellen der Textdatei dauert ca. 8 Minuten Die Anzeige einer XML-Datei habe ich mit ![]() Zum Vergleich: das Lesen einer XML-Datei mit Notepad++ dauert ca. 30 Sekunden. Mike |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Das sind absurde Zahlen! XML ist doch nix anderes als "gepimpter" Text. Wer braucht da 40 Minuten zum erzeugen so einer popligen Datei? Bisher habe ich die XML-Komponentenumschifft und hab meine XML naiv händisch aufgebaut (jedes Tag ist eine eigene Methode, die für den wohlgeformten Ausdruck sorgt), ich komme in ähnliche Größenordnungen, dürfte mir aber keine 40 Minuten zum Aufbau erlauben.
Sherlock |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Zitat:
|
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Zitat:
Für Delphi gibt es einige Implementierungen - MSXML und das recht neue aber laut Angaben performante OXML sind zwei Beispiele. |
AW: Ungeheure Speichernutzung des TWebrowsers beim Laden einer XML
Zitat:
Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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 by Thomas Breitkreuz