AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[FIXED] Streams & Speicherleck

Ein Thema von markusj · begonnen am 25. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#1

[FIXED] Streams & Speicherleck

  Alt 25. Feb 2006, 20:12
Hallo @ all,

ich arbeite zur Zeit an einem sehr Umfangreichen Projekt und habe ein kleines Problem:

In einer Unit, Variables, habe ich sämtliche Globale Variablen gespeichert, darunter auch 3 MemoryStreams.
Im Laufe des Programms werden diese Mehrfach mit *.Free und *:=TMemoryStream.Create frisch erzeugt.
Dabei entsteht jedoch, laut MemCheck ein Speicherloch, ich habe allerdings keine Ahnung warum.
Ich bin ein etwas *komischer* programmiere, ich hab einigermaßen Ahnung, aber dann doch wieder nicht, sprich ich arbeite mit einer Materie die mir Fremd ist, also bitte nicht hauen *au*.

Kleines Beispiel:

Delphi-Quellcode:
unit Variables
...
...
var teststream : TMemoryStream
...
...
Delphi-Quellcode:
unit testunit
...
...
procedure test
var testbyte : byte;
begin
Variables.teststream := TMemoryStream.Create;
testbyte := 255;
Variables.teststream.write(testbyte,1);
Variables.teststream.Free;
end;
Diese Prozedur Test wird mehrfach aufgerufen und produziert ab dem 2. Aufruf ein Speicherleck.

Jetzt die Frage an euch:
1. Warum gibts hier ein Leck?
2. Wie kann ich meinen Stream recyclen?

Vielen Dank schon im voraus,

Markus
Markus
  Mit Zitat antworten Zitat
marabu

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

Re: Streams & Speicherleck

  Alt 25. Feb 2006, 21:08
Hallo Markus,

ich habe das Speicherleck jetzt nicht nachvollzogen, aber grundsätzlich: du musst den Stream ja nicht ständig neu erschaffen, wenn er schon global ist. Es sollte doch reichen, wenn du seine Eigenschaft Size auf 0 setzt.

Grüße vom marabu
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#3

Re: Streams & Speicherleck

  Alt 25. Feb 2006, 21:23
Danke, der Trick funktioniert ... jetzt bemängelt er nur noch die erste Erzeugung des Streams, da ich sämtliche Streams am Anfang des Programms erzeuge ... das ist echt komisch ...
Ich bau mal noch ein wenig um, mal sehen obs dann besser wird ...

mfG

Markus

EDIT: Im Programm selbst bemängelt er nichts, aber bei der Initialisierung ...

Mein Programmaufbau:

Unit Variables enthält eine Prozedur INIT, die alle Streams erzeugt ...
nach der neuen Programmversion werden diese erst mit Free aufgelöst, wenn das Programm beendet.

Dazwischen greifen diverse Prozefuren auf den Stream zu.
Könnte es evtl. daran liegen, dass ich eine Funktion auf den Stream zugreifen lasse?
also

stream := gibstreamzurück(somestrings); ich glaub, ich muss nochmal meinen Quellcode checken ...


EDIT2: Das ist die Lösung !!! Meine Funktion erzeugt intern einen neuen Stream und überschreibt mir den alten --> Speicherleck
Markus
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [FIXED] Streams & Speicherleck

  Alt 25. Feb 2006, 22:52
Moin Markus,

für solche Intialisierungen kannst Du auch den Initialization- und Finalization-Abschnitt der Unit benutzen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:36 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