Schrift
[thread]10776[/thread]

Objekt löschen

Tags: Ähnliche Threads

Leser: 2


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
Froschpopo
 2007-11-12 05:38
#102228 #102228
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich beschäftige mich derzeit mit Modulen.
Macht es eigentlich Sinn, ein Objekt nach dem Gebrauch wieder zu löschen?

Ich dachte mir, wenn ich z.B. $self lösche, dann könnte man etwas Speicher frei machen. Bei mir wird nämlich das Objekt meistens schon kurz nach Programmstart erstellt und bleibt ja dann logischerweise bis Programmende erhalten. Aber was ist, wenn ich das Objekt schon vorher seinen Zweck erfüllt hat und ich es plötzlich nicht mehr benötige?

Bisher habe ich immer eine extra delete() funktion gemacht, das dann u.a. den $self geleert hat.
Meine nächste Idee wäre z.b. einfach
Code: (dl )
$objekt  = undef;

genügt das?
renee
 2007-11-12 09:53
#102233 #102233
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Natürlich macht das Sinn, das Objekt nur so lange zu behalten wie es gebraucht wird...

Ob wirklich Speicher freigegeben wird, hängt davon ab, ob nicht noch Referenzen auf das Objekt an anderer Stelle existieren...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-11-12 10:15
#102240 #102240
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hier macht es keinen sinn:
Code (perl): (dl )
1
2
3
4
if (foo) {
  my $object = Blabla->new;
  machwas($object);
}

warum? na weil $object nach dem if-block sowieso undef ist!

hier macht es sinn:
Code (perl): (dl )
1
2
3
4
5
6
7
8
if (foo) {
  my $object = Blabla->new;
  machwas($object);
  # mehrere funktionen, die zeit brauchen und oder speicher, aber
  # die $object nicht brauchen
  undef $object;
  machwas('anderes');
}

aber du darfst ruhig auch mal selbst die initiative ergreifen und den speicher
messen. fuer uns ist das wissen auch nicht vom himmel gefallen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2007-11-12 11:00
#102242 #102242
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Über sowas hat man sich Gedanken gemacht, als die Rechner noch maximal 640KB Speicher hatten. Das sind Dinge um die sich Perl eigentlich perfekt kümmert. erst wenn es tatsächlich zu Problemen kommt würde ich mir um den Speicherverbrauch Sorgen machen.
nepos
 2007-11-12 11:56
#102249 #102249
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Naja, es kann nie schaden, den Verbrauch von Speicher wenns geht zu reduzieren. Auch wenn man heute sehr viel RAM hat, da sind auch andere Programme, die auch Speicher wollen ;)
Struppi
 2007-11-12 13:21
#102252 #102252
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Klar, wenn das Programm länger im Speicher bleibt, kann das eine Rolle spielen. Aber einmal laufen Perl Skript i.d.R. nicht lange und dann ist ein Objekt ja erstmal kein Speicherfresser. Solange dort keine MB grossen Dateien eingelesen oder massive Module eingebunden wurden, dürfte die Platzersparniss auf heutigen Systemen minimal sein und bringt meiner Meinung keinen Vorteil.
pq
 2007-11-12 14:47
#102256 #102256
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Struppi+2007-11-12 12:21:45--
Klar, wenn das Programm länger im Speicher bleibt, kann das eine Rolle spielen. Aber einmal laufen Perl Skript i.d.R. nicht lange

wer sagt das denn? kommandozeilenskripte laufen evtl. lange, FastCGI- oder mod_perl-
Prozesse laufen auch meist etwas laenger. gerade bei letzterem kann es sich schon bemerkbar
machen, da ja dort mehrere prozesse laufen und sich das problem dann mal eben
vervielfaeltigt.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
sid burn
 2007-11-12 15:00
#102257 #102257
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Man sollte den Scope bei Variablen einfach so gering wie Möglich halten, dann werden die Variablen (Objekte) automatisch gelöscht wenn sie ungültig werden.

Müssen noch aufräumarbeiten getan werden dann kommt das in die Methode DESTROY() die automatisch aufgerufen wird, wenn ein Objekt zerstört wird.

Eine extra Methode für ein explizites Löschen würde ich nicht machen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Froschpopo
 2007-11-12 21:36
#102306 #102306
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
also bei meiner Community wo oftmals viele Requests in sehr kurzem Zeitrahm stattfinden hängt er schon manchmal für eine halbe Sekunde fest weil z.B. der Vorrat an preforks leer geht und er mit dem neu erstellen nicht hinterherkommt.
Deshalb muss ich an jeder Ecke sparen und soviel wie möglich in Module auslagern.

bei der undef-Variante täte mich aber noch interessieren, ob das nur die Löschung des Objekts zur Folge hat, oder ob dann auch z.B. $self vollständig gereinigt bzw. wird.
pq
 2007-11-12 22:02
#102308 #102308
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Froschpopo+2007-11-12 20:36:52--
bei der undef-Variante täte mich aber noch interessieren, ob das nur die Löschung des Objekts zur Folge hat, oder ob dann auch z.B. $self vollständig gereinigt bzw. wird.

hmm? $self ist das objekt.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2007-11-12 05:38.