Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.05.13 16:16 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.05.13 20:36 
Keine Ahnung von C oder .net, aber in Delphi wird lediglich für das Erzeugen der Komponente Speicher angefordert und beim Zerstören des Objekts wieder freigegeben – und auch das nur, wenn man die Komponente zur Laufzeit erst erzeugt. Wenn deine Komponente, diese mir unbekannte BildBox, eine LoadfromFile-Methode besitzt, mußt du dich bestimmt nicht selber darum kümmern, sonst wäre das eine lausige Bildanzeige-Komponente.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.05.13 21:01 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mi 01.05.13 21:03 
Zitat:
Müsste ich nicht vor jedem Ladevorgang ein Bild freigeben, bevor ich das nächste lade?

Musst du nicht, kannst du aber.

das ist in der Regel nicht nötig, weil der Garbage Collecor (GC) das ganze automatisch erledigt. Ich habe mal eine Bildverarbeitung geschrieben, wo ich nichts mit Dispose freigegeben habe, das hat funktioniert. Leider hat es auch die vollen 8 GB RAM genutzt ^^ Jetzt ein Dispose an der passenden Stelle und der RAM Verbrauch bleibt im Rahmen.

Es gibt natürlich Klassen (insb. Sachen die mit Grafik zu tun haben) da sollst du Dispose aufrufen, wenn du die nicht mehr brauchst. Generell gilt, wenn die Klasse IDisposable implementiert, solltest du nach Benutzung .Dispose() aufrufen oder direkt ein using(){} verwenden. Weil der GC zwar seine Arbeit selbstständig macht, aber er macht sie dann eben auch wann er will.

Siehe auch msdn.microsoft.com/d...tem.idisposable.aspx
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mi 01.05.13 21:52 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Das Thema gehört verschoben !!
Hab ich dann mal gemacht ;-)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.05.13 22:31 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Do 02.05.13 01:01 
Jein.

Das using erledigt das Dispose, ja. Aber es ist nicht gleichbedeutend mit dem was du da hast. Du musst immer eine Variable deklarieren und diese hat dann auch nur den Scope des using Staements.
Folgendes ist also equivalent:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
using (var myRes = new MyResource())
{
    myRes.DoSomething();

}

und
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var myRes= new MyResource();
try
{
    myRes.DoSomething();
}
finally
{
    if (myRes!= null)
        ((IDisposable)myRes).Dispose();
}
// myRes fällt hier aus dem scope


D.h. in deinem konkreten Fall solltest du auf null prüfen und ggf. Dispose() aufrufen. (Weil das ja gar keine lokale Variable ist)
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.05.13 01:59 
- Nachträglich durch die Entwickler-Ecke gelöscht -