AGB  ·  Datenschutz  ·  Impressum  







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

Konzeptfrage Speicher freigeben

Ein Thema von WIng2005 · begonnen am 11. Sep 2008 · letzter Beitrag vom 11. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 10:51
Hallo Gemeinde,

ich hatte vor geraumer Zeit ein Problem mit folgendem Code (sinngemäß):

Delphi-Quellcode:

try
  //Abfrage DB-> Pfad Bilddatei holen
  if zquery1.RecordCount=1 then
  Begin
    qpfad:=qpfad+zquery1.fieldbyname('file_name_org').AsString; //Quellpfad wird gesetzt
    if DownloadFile(qpfad, filepath+'tmp.jpg')=true then //die Datei wird temporär heruntergeladen
      Begin
        bild:=TJPEGImage.create; //bild:TGraphic
        bild.LoadFromFile(filepath+'tmp.jpg');
        NGrPFert2AuftrVw_det.Cell[6,0].ObjectReference:=bild;
        NGrPFert2AuftrVw_det.Repaint;
      end
      else
        NGrPFert2AuftrVw_det.Cell[6,0].Clear;
  end;
except
end;
Es soll eine DB nach einem Pfad zu einem jpg-file durchsucht werden und dieses (nachdem es zwischengespeichert wurde) in ein
Grid (NextGrid) geladen. Funktioniert soweit auch gut. Nun kann ich jedoch "bild" nicht wieder freigeben, da der Eintrag im Grid nur eine Referenz ist. Also dachte ich mir, dass ich einfach beim Wechsel in ein anderes Modul (also auch aus einer völlig anderen Prozedur heraus (sogar in einer anderen Unit)) "bild" freigebe. Auch das funktionierte soweit. Dann bekam ich jedoch ständig Fehler "Zugriffsverletzung in Modul dcc70.dll" (muss nicht im Zusammenhang stehen), sodass ich die "Bild-Funktion" erstmal auskommentiert hatte. Nun möchte ich mich der Problematik wieder annehmen und würde gern mal eure Meinung zum beschiebenen Konzept wissen. Mir geht es dabei auch darum, eine Möglichkeit zu erarbeiten Stringslisten über die Grenzen einer Prozedure hinweg zu speichern (also ähnlich, wie die vorherige Problematik).

MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 10:53
Das NextGrid hält doch die Referenz. Evtl. wird sie vom Grid selbst freigegeben? Das könntest Du ja z.B. mit FastMM überprüfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#3

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 11:12
Hallo,

wenn ich jedoch bild zu früh freigebe, wird bei jedem Repaint (z.B. nach Formresize) die Referenz neu geladen, was dann in einer
Zugriffsverletzung endet. Mir ging es vorrangig um die Problematik, Speicher in einer anderen Prozedur freizugeben.

MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 11:16
Grundsätzlich bin ich ja auch dafür, ein Objekt immer auf der Ebene freizugeben, in der es angelegt wurde. Da aber nun das Grid die Referenz braucht und damit arbeitet, geht das so natürlich nicht. Falls das Grid die Freigabe nicht selbst erledigt, musst Du das dann eben an geeigneter Stelle (z.B. im Destruktor der Form) übernehmen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#5

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 11:37
Und wie würde sich die Problematik z.B. auf Stringlisten auswirken? Ich möchte eine Stringlist erstellen und diese im Verlauf mehrerer eingaben über ein Edit-Feld füllen. Könnte man dann die Liste selbst erst z.B. beim Klick auf einen Button freigebn, oder ist das "russisch"?

MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 12:29
Wenn die Stringliste über "Methodengrenzen" hinweg existieren soll, würde ich sie als privates Feld der Form deklarieren, im OnCreate erzeugen, im Programmverlauf bearbeiten und im OnDestroy wieder zerstören.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#7

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 13:34
Vielen Dank für den Tip.
Habe es nun so gelöst, dass die Liste bei Bedarf (also wenn im zugehörigen Modul ein entspr. Event auftritt)
erzeugt und bei verlassen des Modules sowie im OnDestroy wieder freigegeben wird.
Wäre hier auch (habe das hier mal gelesen) eine ObjectList (unbekannterweise) zu gebrauchen? Muß in der Stringliste ggf. auch wieder einzelne Zeilen löschen, suchen, ersetzen usw... oder ist die Stringliste deiner Meinung nach ausreichend?

MFG
Steffen

Edit: Falls es Off-Topic wird....sorry
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 13:40
Für Strings eine Stringliste, für Objektinstanzen eine TObjectList . Gibst Du die Listen an 2 verschiedenen Stellen frei (so habe ich das verstanden), solltest Du das aber mit FreeAndNil machen oder die Liste von Hand auf nil setzen, sonst kann es ganz böse Fehler geben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#9

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 13:43
habs so:

if templist <> nil then freeandnil(templist); Vielen Dank für die Hilfe.

MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Konzeptfrage Speicher freigeben

  Alt 11. Sep 2008, 15:10
Zitat von WIng2005:
if templist <> nil then freeandnil(templist);
Die Prüfung auf nil kannst du dir noch sparen - das macht FreeAndNil eh schon.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:27 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