AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Datei bearbeiten und nur Teile wieder speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Datei bearbeiten und nur Teile wieder speichern

Ein Thema von Hoschie · begonnen am 29. Feb 2008 · letzter Beitrag vom 8. Mär 2008
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#31

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 4. Mär 2008, 20:19
Moin und Danke,

zur Frage: ja, in jeder Datei ist nur ein Element Lehrgang drin und innerhalb des Elementes sind dann mehrere Childs.

Es läuft auch soweit, recht gut, nur nach unbestimmter Zeit bleibt er hängen. Ich habe dann versucht, das so zu machen, dass ich den Speicher der Variablen dann mit free wieder freigebe, allerdings kennt er das mal wieder nicht und in der MSXML_TLB habe ich dazu auch nichts gefunden. Geht das auch mit Release ? Oder woran könne das sonst noch liegen ?

Die versteckten Anregungen sind klasse, vereinfacht vieles.

Gruß
Hoschie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#32

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 4. Mär 2008, 20:29
Wenn du glaubst, dass dir der Speicher zuläuft, dann solltest du ein Werkzeug wie z.B. Hier im Forum suchenMemCheck einsetzen.
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#33

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 10:12
Also ich habe nach 128 aufgerufenen XML Seiten so an die 260.000 Kb gemäß dem TaskManager, da ist es ja kein wunder, dass die Anwendung sich irgendwann aufhängt. Ich befürchte, dass ich irgendwie das WebBrowser Dokument wieder freigeben muss, bevor ich erneut darauf zugreife. Nur wie weiss ich noch nicht. Irgendwelche Tipps ?

Ich werde heute Abend mich mal an MemCheck ranwagen.

Kann ich WebBrowser so freigeben :WebBrowser1.Document.free und ihn dann gleich wieder erneut aufrufen oder muss das anders aussehen ?

Gruß
Hoschie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#34

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 10:33
Moin Hoschie,

wenn du größere Dokumente geladen hast, dann belegt das aufgebaute DOM natürlich reichlich Speicher. Sobald du ein neues Dokument lädst, wird dieser Speicher aber automatisch wieder freigegeben. Du selbst kannst das mit WebBrowser.Navigate('about:blank') veranlassen.

Von dir verwendete Automationsobjekte (COM) werden automatisch freigegeben, sobald sie nicht mehr verwendet werden. Du kannst die vorzeitige Freigabe erzwingen, indem du sie einfach auf NIL setzt. Free() dient der Freigabe von Delphi-Objekten.

Freundliche Grüße
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#35

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 10:54
Dadurch das ich ja gleich nach der Abbarbeitung die nächste Webseite aufrufe habe ich ja keine Möglichkeit den Speicher des Dokumentes mit aufruf der Seite about:blank freizugeben. Aber wenn alles automatisch freigegeben wird, wie erkläre ich mir dann den horenden Speicherbedarf, der mit jeder aufgrufenen Seite anwächst.

Gruß
Hoschie
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#36

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 11:01
Zitat von marabu:
Wenn du größere Dokumente geladen hast, dann belegt das aufgebaute DOM natürlich reichlich Speicher. Sobald du ein neues Dokument lädst, wird dieser Speicher aber automatisch wieder freigegeben. Du selbst kannst das mit WebBrowser.Navigate('about:blank') veranlassen.

Von dir verwendete Automationsobjekte (COM) werden automatisch freigegeben, sobald sie nicht mehr verwendet werden. Du kannst die vorzeitige Freigabe erzwingen, indem du sie einfach auf NIL setzt. Free() dient der Freigabe von Delphi-Objekten.
Theoretisch ja, praktisch hat die Implementierung im IE bezüglich Interfaces viele Fehler so das man hier (durch eigene Tests herausfinden welche) an diversen Stellen vor dem setzen auf nil einfach mal ein _Release einfügen muss um um das Problem zu löse. Jedoch schön alles mit try...except absichern da z.B. der IE 7 hier weniger Fehler hat als z.B. der IE 6 und man sonst bei einem Update das hier Fehler behebt sonst probleme bekommt.

Ich vermute mal das IE-Intern Objekte gegenseitig Interface-Zeiger halten so das hier eine "Deadlock"-Situation (ich glaube es gibt auch einen gebräuchlicheren Begriff) vorliegt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 11:05
Zitat von marabu:
Sobald du ein neues Dokument lädst, wird dieser Speicher aber automatisch wieder freigegeben. Du selbst kannst das mit WebBrowser.Navigate('about:blank') veranlassen.
also, TWebBrowser verwendet ja den IE und bei mir hat der IE ein Speicherleck ... wenn ich im IE selber viele Seiten hintereinander lade, dann müllt der auch so den RAM zu ;(

Dagegen hilft hier nur IE beenden und neu starten.

Falls die IE-Instanz nur vom TWebBrowser genutzt wird, dann sollte es vermutlich helfen, wenn man diesen freigibt (WebBrowser.Free) und dann neu erstellt (WebBrowser := TWebBrowser.Create) ... dann müßte ja hoffentlich auch die speicherfressende IE-Instannz gelöscht/feigegeben werden?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#38

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 12:19
Es wäre ja schon von Vorteil, wenn er den reservierten Bereeich nur überschreibt und nicht ständig erweitert. Ich werde das heute Abend mal antesten und dann melden.

Gruß
Hoschie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#39

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 12:24
Hallo,

ich habe schon viele Threads in der DP zum Thema TWebBrowser und IE gesehen - sie hatten oft eines gemeinsam: Die falsche Darstellung der Beziehung zwischen dem Webbrowser Control und dem Internet Explorer. Das visuelle Herzstück des modular aufgebauten IE ist das Webbrowser Control und nicht umgekehrt. Der IE ist ein Host für das WB Control, so wie viele andere Browser (nicht FireFox oder Opera) auch.

Ich habe zu Zeiten von IE5 damit begonnen das Control in einem Projekt zu verbauen. Speicherlecks beim IE habe ich nie gesucht, es gab bis heute keinen Grund dazu. Ich will damit nicht behaupten, dass es diese Lecks nicht gäbe, alleine mir sind bisher keine aufgefallen.

Ich bin auch fest davon überzeugt, dass die Ursache für Speicherlecks im Programm von Hoschie zuerst in seinem eigenen Code gesucht werden muss.

Freundliche Grüße
  Mit Zitat antworten Zitat
Hoschie

Registriert seit: 7. Feb 2006
41 Beiträge
 
Delphi 2005 Personal
 
#40

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 12:42
Was durchaus sehr wahrscheinlich ist und ich das ganze nicht absprechen möchte, weil ich dafür vieeeel zu wenig Ahnung habe. Es sah für mich nur eben nach einem direktem Zusammenhang mit dem aufrufen der Seiten auf, weil die Speichermenge in dem Moment stieg, als er die neue Seitee geladen hat, Aber ich werde versuchen das ganze möglichst einzugrenzen mit dem MemCheck.

Trotzdem bin allen Postern hier sehr dankbar für die Hilfe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz