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 5 von 6   « Erste     345 6      
Hoschie

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 20:08
Also ich habe das jetzt mal mit MemCheck durchgecheckt, aber so wirklich werde ich dadurch nicht schlau.

Delphi-Quellcode:
MemCheck version 2.75

TOP 10 Leaks: begin
Leak #0 User allocated memory (GetMem)
   Size: 102
   1 Occurence
   call stack - 0 : (no debug info) Find error: 0012F53C
   call stack - 1 : Routine @Sysutils@Exception@CreateFmt Find error: 0040C565
   call stack - 2 : (no debug info) Find error: 0040CA74
   call stack - 3 : Routine @Sysutils@GetExceptionObject Find error: 0040CB6B
   call stack - 4 : Routine @System@@ExceptionHandler Find error: 00404646
   call stack - 5 : (no debug info) Find error: 7C913787
   call stack - 6 : (no debug info) Find error: 7C91EAF6

Leak #1 User allocated memory (GetMem)
   Size: 16
   1 Occurence
   call stack - 0 : (no debug info) Find error: 0012F588
   call stack - 1 : Routine @Sysutils@GetExceptionObject Find error: 0040CB6B
   call stack - 2 : Routine @System@@ExceptionHandler Find error: 00404646
   call stack - 3 : (no debug info) Find error: 7C913787
   call stack - 4 : (no debug info) Find error: 7C91EAF6

Leak #2 User allocated memory (GetMem)
   Size: 4
   1 Occurence
   call stack - 0 : (no debug info) Find error: 0012FFE0
   call stack - 1 : (no debug info) Find error: 7C816FD3
   call stack - 2 : (no debug info) Find error: FFFFFFFC

TOP 10 Leaks: end

Total leak: 122 bytes


*** MEMCHK: Blocks STILL allocated ***

Leak #0 User allocated memory (GetMem)
   Size: 102
   1 Occurence
   call stack - 0 : (no debug info) Find error: 0012F53C
   call stack - 1 : Routine @Sysutils@Exception@CreateFmt Find error: 0040C565
   call stack - 2 : (no debug info) Find error: 0040CA74
   call stack - 3 : Routine @Sysutils@GetExceptionObject Find error: 0040CB6B
   call stack - 4 : Routine @System@@ExceptionHandler Find error: 00404646
   call stack - 5 : (no debug info) Find error: 7C913787
   call stack - 6 : (no debug info) Find error: 7C91EAF6

Leak #1 User allocated memory (GetMem)
   Size: 16
   1 Occurence
   call stack - 0 : (no debug info) Find error: 0012F588
   call stack - 1 : Routine @Sysutils@GetExceptionObject Find error: 0040CB6B
   call stack - 2 : Routine @System@@ExceptionHandler Find error: 00404646
   call stack - 3 : (no debug info) Find error: 7C913787
   call stack - 4 : (no debug info) Find error: 7C91EAF6

Leak #2 User allocated memory (GetMem)
   Size: 4
   1 Occurence
   call stack - 0 : (no debug info) Find error: 0012FFE0
   call stack - 1 : (no debug info) Find error: 7C816FD3
   call stack - 2 : (no debug info) Find error: FFFFFFFC

*** MEMCHK: End of allocated blocks ***


*** MEMCHK: Chronological leak information ***

* User allocated memory (GetMem) (Leak #2) Size: 4
* User allocated memory (GetMem) (Leak #1) Size: 16
* User allocated memory (GetMem) (Leak #0) Size: 102

*** MEMCHK: End of chronological leak information ***


*** MEMCHK: Blocks written to after destruction ***

   Bad blocks count: 0


*** MEMCHK: End of blocks written to after destruction ***
Man entschuldige mir diesen geposteten Text, aber dabei benötige ich echt Hilfe.

Danke
  Mit Zitat antworten Zitat
marabu

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 20:16
Hallo Hoschie,

das einzige für mich aus der Ferne erkennbare ist, dass du lediglich 122 Byte verschwendest. Besser helfen kann man dir, wenn du ein Projekt als Quelltext bereit stellst. Das muss nicht dein eigentliches Projekt sein - es genügt ein Demo-Projekt, mit dem man dein Problem nachstellen kann.

Freundliche Grüße
  Mit Zitat antworten Zitat
Hoschie

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 20:21
Im Endeffekt habe ich mit dem reinstellen kein Problem, das einzige was nicht public werden darf ist die Webadrese, allerdings ist es nicht das beste und schönste, denn das rund und "hübsch" machen wollte ich erledigen, wenn alles so läuft wie es soll. Soll ich das Projekt einfach hier reinstellen ??

Gruß
Hoschie
  Mit Zitat antworten Zitat
marabu

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 20:26
Besser nicht, sonst verdirbt sich noch jemand die Augen daran.

Wenn aber doch, dann bitte als ZIP-Archiv anhängen - ohne DCU und EXE und Backup-Dateien.
  Mit Zitat antworten Zitat
Hoschie

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 20:51
OK, also dann mal los. Ich schilder kurz nochmal die Funktion und den Fehler: Das Programm soll nacheinander und ohne Zwischenpause bestimmte XML Webseiten aufrufen, ein Element Lehrgang und dessen Unterelemente in einer XML-File speichern, wobei die verschiedenen Lehrgangselemente in einer Datei zusammengeführt (immer angehängt) werden. Das Programm läuft, jedoch unterbricht es nach unterschiedlichen Seitenaufrufen und hängt sich auf. Ich vermute das dieses am hohen Speicherbedarf liegt. Je nach Laufzeit waren es bis zu 400 MB Arbeitsspeicher die belegt waren (laut TaskManager). Vielleicht hat ja jemand eine Idee, nachdem er sich den gesamten Quelltext angeschaut hat und kann mir helfen, dieses Phänomen zu beseitigen. Angehängt habe ich jetzt nur mal die passende Unit, denn dort steht alles drin.

Vielen Dank
Hoschie
Angehängte Dateien
Dateityp: pas unit2_162.pas (3,6 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
marabu

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 21:00
Du rufst aus dem event handler für OnDocumentComplete() die Methode Navigate() auf.
Das führt in unseren Breitengraden zu einer indirekten Rekursion.
  Mit Zitat antworten Zitat
Hoschie

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 21:17
Jo, ich wollte damit sicherstellen, dass die nächste Seite erst aufgerufen wird, sobald die alte Seite abgehandelt wurde. das ganze läuft solange, bis ich über den "Stoppen" Button die Variable vScannen auf False setze.

Meinst du es liegt daran ?
  Mit Zitat antworten Zitat
marabu

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 21:25
Sicher.

Du musst dir unbedingt ein anderes Konzept zurechtlegen.
  Mit Zitat antworten Zitat
Hoschie

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 21:38
Gibt es denn eine andere Möglichkeit ? Das schockt mich jetzt doch etwas. wie kann ich denn sonst sicherstellen, dass er die nächste seite erst aufruft, wenn die alte abgearbeitet wurde.
  Mit Zitat antworten Zitat
marabu

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

Re: Datei bearbeiten und nur Teile wieder speichern

  Alt 5. Mär 2008, 22:20
Beim Event OnDocumentComplete() möchtest du eigentlich nur SaveBody() ausführen, eventuell noch irgendwelche Steuerungsfunktionen, aber gewiss nicht Navigate(). Es ist auch kein guter Stil, wenn du Button1.Click ausführst - unabhängig vom Katastrophenfaktor.

Eine Weiterschaltung auf einen anderen URL findet in deinem Code nicht statt, aber das weißt du?

Mehrerer Seiten hintereinander kannst du auch so abholen:

Delphi-Quellcode:
const
  NAV_TIMEOUT = 5000; // milliseconds

var
  Links: TStrings;

procedure Timeout(const url: string);
begin
  ShowMessage('timeout: ' + url);
end;

function WaitForDocumentComplete(wb: TWebBrowser; timeout: Word): Boolean;
var
  ticks: Cardinal;
begin
  ticks := GetTickCount;
  repeat
    Application.ProcessMessages;
  until (wb.ReadyState = READYSTATE_COMPLETE)
  or (GetTickCount - ticks > timeout);
  Result := wb.ReadyState = READYSTATE_COMPLETE;
end;

begin
  for i := 0 to Pred(Links.Count) do
  begin
    WebBrowser.Navigate(Links[i]);
    if WaitForDocumentComplete(WebBrowser, NAV_TIMEOUT)
      then SaveBody
      else Timeout(Links[i]);
  end;
end;
Getippt und nicht getestet.

Gute Nacht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 08:57 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