Arbeitspeicher voll wenn projekt oft geöffnet und dann geschlossen wird?35 images



  • hi zusammen, ich habe ein projekt (n simples jump´n run spiel) in dem habe ich ca. 35 images (viele werden jetzt irgendwas in der richtung sagen: warum nicht dynamisch erzeugen? aber das möchte ich aus irgendeinem grund nicht!(weiss selber nicht genau warum))

    Ich lade die images in der OnShow Mthode der Form:

    Image1->Picture->LoadFromFile("images.bmp");
            Image2->Picture->LoadFromFile("images.bmp");
            Image3->Picture->LoadFromFile("images.bmp");
            Image4->Picture->LoadFromFile("images.bmp");
            Image5->Picture->LoadFromFile("images.bmp");
            Image6->Picture->LoadFromFile("images.bmp");
            Image7->Picture->LoadFromFile("images.bmp");
            Image8->Picture->LoadFromFile("images.bmp");
            Image9->Picture->LoadFromFile("images.bmp");
            Image10->Picture->LoadFromFile("images.bmp");
            Image11->Picture->LoadFromFile("images.bmp");
            Image12->Picture->LoadFromFile("images.bmp");
            Image13->Picture->LoadFromFile("images.bmp");
            Image14->Picture->LoadFromFile("images.bmp");
    /*        Image15->Picture->LoadFromFile("images.bmp");
            Image16->Picture->LoadFromFile("images.bmp");
            Image17->Picture->LoadFromFile("images.bmp");*/
            Kugel1->Picture->LoadFromFile("kugel.bmp");
            Kugel2->Picture->LoadFromFile("kugel.bmp");
            Kugel3->Picture->LoadFromFile("kugel.bmp");
            Kugel4->Picture->LoadFromFile("kugel.bmp");
            Kugel5->Picture->LoadFromFile("kugel.bmp");
            Kugel6->Picture->LoadFromFile("kugel.bmp");
            Leiter01->Picture->LoadFromFile("leiter.bmp");
            Gegner01->Picture->LoadFromFile ("gegner.bmp");
            Gegner02->Picture->LoadFromFile ("gegner.bmp");
            Gegner03->Picture->LoadFromFile ("gegner.bmp");
            Gegner04->Picture->LoadFromFile ("gegner.bmp");
            Gegner05->Picture->LoadFromFile ("gegner.bmp");
    //        Gegner06->Picture->LoadFromFile ("gegner.bmp");
            GegnerStachelNM01->Picture->LoadFromFile ("stachel.bmp");
            Munition01->Picture->LoadFromFile ("munition.bmp");
            Munition02->Picture->LoadFromFile ("munition.bmp");
            Munition03->Picture->LoadFromFile ("munition.bmp");
    

    Wenn ich jetzt aber ds Projekt ca. 10 - 15 mal starte und schließe, sieht das programm abgestürzt aus! ich kann aber noch laufen. dsa sieht ungefähr so aus, wie wenn man in 3d-shooter durch die wände läuft.

    Muss ich Images dafür irgendwie beim Schließen der Form 'zerstören'??
    Da ich tippe, dass der Arbeitsspeicher voll ist
    Schonmal Dank,
    J0

    [ Dieser Beitrag wurde am 18.02.2003 um 19:53 Uhr von J0 editiert. ]



  • delete Image1;
    delete Image2;

    usw.



  • Hmmm... die Komponenten enthalten die delete-Methode. Was zur Entwurfszeit erstellt wure, räumt die sich ordentlich beendende Anwendung IMHO auch ab. Selbst ein
    Image1->Picture = NULL;
    halte ich für nicht nötig. Andernfalls wäre der Speicher sicher wesentlich früher überfüllt.

    Aber wie sieht es mit Speicherlecks zur Laufzeit aus? Kleinigkeiten, die man ggf. übersehen hat, können sich da schon addieren. Alles, was mit dem Operator new erzeugt wurde, sollte auf jeden Fall auch wieder abgräumt werden...

    delete myObject;
    myObject = NULL;

    Mehr kann man wohl nicht sagen, ohne die Situation zu kennen, IMHO.



  • lol, das ist doch ****erig. du kannst doch nicht 35 zeilen dafür verschwenden.



  • Original erstellt von <natürlich>:
    **delete Image1;
    delete Image2;

    usw.**

    Natürlich nicht.



  • oh 🙄

    hab vergessen is ja kein c++



  • Natürlich ist das C++.



  • aber was für eins. 😃 😃



  • Richtig gutes natürlich. Um das ganze mal aufzulösen: hast du schonmal davon gehört, dass man Instanzen von VCL-Styles-Klassen nicht wieder freigeben muss? Das macht der sogenannte Owner, der dem Konstruktor mitgegeben wird.



  • Und wenn er als Owner NULL angegeben hat? Dann muss er sie mit delete löschen.



  • Richtig. Hat JO aber nicht gemacht.



  • ohne was von der library zu wissen...:

    Image1->Picture->LoadFromFile("images.bmp");
            Image2->Picture->LoadFromFile("images.bmp");
            Image3->Picture->LoadFromFile("images.bmp");
            Image4->Picture->LoadFromFile("images.bmp");
            Image5->Picture->LoadFromFile("images.bmp");
    

    ist ressourcenverschwendung.



  • Man kanns nicht oft genug laden. Öfter hält besser.



  • Höhö. Witzig.



  • und wie 🙄



  • soll ich das so machen?:

    Image1->Picture->LoadFromFile("images.bmp");
    Image2->Picture = Image1->Picture;
    

    für euch freaks (is nicht böse gemeint, ich bewundere euch für euer wissen) mag das der assigst code der welt sein, aber bei mir erfüllt der seine zwecke... aber mein code sieht nich überall so schlimm aus, sonst hab ich das über dynamic_cast gemacht....

    J0



  • Image2->Picture->Bitmap = Image1->Picture->Bitmap;
    

    zum Beispiel.

    [ Dieser Beitrag wurde am 18.02.2003 um 22:16 Uhr von WebFritzi editiert. ]



  • ok, danke!
    werde ich mir merken!

    der 'fehler' passiert jetzt nichmehr!

    J0



  • Macht mal keine Panik 😃 😃 😃

    Wo Werden die 35 Images erzeugt?
    a) im Formular?
    Dann dürfte ews kein speicherproblem geben (werden vom Formular deletet!)
    b) in On Create (Constructor)?
    Mit new TImage z.b.
    Dann MÜSSEN die Dinger auch in OnClose (Destructor)deletet werden.

    b) is' eh' besser, weil schön dynamisch!

    Am besten diskutieren sich unbeschriebene Probleme!!! 😃 😃 😃



  • Original erstellt von J0 (sein erster Beitrag):
    hi zusammen, ich habe ein projekt (n simples jump´n run spiel) in dem habe ich ca. 35 images (viele werden jetzt irgendwas in der richtung sagen: warum nicht dynamisch erzeugen? aber das möchte ich aus irgendeinem grund nicht!(weiss selber nicht genau warum))

    Ich denke, das erübrigt deine Frage.


Anmelden zum Antworten