![]() |
Speicherauslastung einzelner Komponenten
Hallo Leute,
Delphi7 Zeos-LIB Firebird 2.1 Reportbuilder LMD-Tools Allgemein: ...hab ein "Speicherproblem" (Out of memory) wenn ich meinen "Import/Export" durchführe... Situation: Mit 30 Query´s greife ich auf eine GDB zu.. Eine Query1 ist die "Hauptquery" und besitzt z.B.: 1000 Datensätze (wird bis zum EOF durchgearbeitet) die restlichen Querys werden anhand Query1.afterScroll gefiltert... Mit 30 weiteren Querys greif ich auf eine Kopie einer leeren GDB (gleiche Tables wie das Original) zu und schreib genau das, was die 30 anderen an Daten liefern.. Problem: ... man kann im Taskmanager zuschauen , wie die Speicherauslastung meiner Software kontinuierlich in die höhe geht .. Wenn man wenig Exportier, gibt es keine Probleme... Wenn man viel Exportier, kann sich das Programm aufhängen (kommt auf die Hardware an)... Meine Frage: Jetzt würd ich gern (betreffend Fehlersuche) feststellen, was für diesen kontinuierlichen Speicherzuwachs verantwortlich ist ... hat jemand Ideen ?? Vielen Dank Erich Wanker |
Re: Speicherauslastung einzelner Komponenten
Zitat:
Wenn du 30 Tabellen zu kopieren hast, dann kannst du doch jede Tabelle der Reihe nach kopieren.
Delphi-Quellcode:
Zum Kopieren aller Datensätze dient folgender Code:
// Quelltabelle öffnen
QuerySource.SQL.Text := 'SELECT * FROM '+tabellenname; QuerySource.Open; // Zieltabelle öffnen QueryDest.SQL.Text := 'SELECT * FROM '+tabellenname + ' WHERE 0=1'; QueryDest.Open; // Alle Datensätze kopieren CopyDataSet(QuerySource, QueryDest);
Delphi-Quellcode:
Damit hast du jetzt das Handwerkszeug zum Kopieren einzelner Tabelle.
procedure CopyDataSetRecord(Src,Dst: TDataSet; TagMask:Integer=0);
var i: Integer; fSrc,fDst: TField; begin for i := 0 to Src.FieldCount-1 do begin fSrc := Src.Fields[i]; fDst := Dst.FindField(fSrc.FieldName); // mit TagMask kann gezielt das Kopieren best. Felder verhindert werden // z.B. Autoinc-Felder if Assigned(fDst) and ((fSrc.Tag and TagMask)=0) then begin fDst.Value := fSrc.Value; end; end; end; procedure CopyDataSet(Src,Dst: TDataSet); begin Src.First; while not Src.Eof do begin Dst.Append; try CopyDataSetRecord(Src,Dst); Dst.Post; except Dst.Cancel; raise; end; Src.Next; end; end; Wichtig ist auch noch die Reihenfolge in der die Tabellen kopiert werden. Zuerst die "Haupttabelle" kopieren und danach die abhängigen Tabellen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 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