Wiederbeschreiben von TStringGrid erhöht ständig die Speicherauslastung



  • Hallo Leute,

    ich benutze BCB 5.0 Pro unter Win XP und habe folgendes Problem.

    Ich habe eine TStringGrid mit 32 Spalten und 64000 Zeilen. Diese Tabelle
    beschreibe ich alle 2 Minuten wieder.
    Das Problem ist, dass die Speicherauslastung sich jedes Mal um 20 MByte erhöht.

    Der Quellcode ist immer gleich:

    StringGrid1->Cells[Spalte][Zeile] = FloatToStrF(Zwischenwert_double, ffFixed, 7, 1);
    

    Ich habe schon versucht den gesamten Tabelleninhalt zwischendurch zu löschen:

    // Inhalt der Empfangstabelle löschen
    // ==================================
    for(COUNT_ZEILE = 1; COUNT_ZEILE < STRINGGRID1->Rowcount; COUNT_ZEILE ++)
    {
     for(COUNT_SPALTE = 0; COUNT_SPALTE < STRINGGRID1->Colcount; COUNT_SPALTE ++)
     {
      StringGrid1->Cells[COUNT_SPALTE][COUNT_ZEILE]= "";
     }
    }
    

    aber das gibt den Speicher auch nicht frei

    Weis vielleicht jemand wie man die Tabelle handeln muss, damit die Speicherauslastung sich nicht erhöht?

    Danke im Voraus



  • Nun ja, ich sag mal nichts dazu, ob es sinnvoll ist, eine Tabelle mit 64000 Zeilen tatsächlich auch darzustellen. Wer will sich das denn ansehen? Insbesondere, wenn die auch noch alle 2 Minuten neugeschrieben wird. Hier wäre aber wohl weniger mehr...

    An der Speicherauslastung wirst Du nichts ändern können. Schließlich werden da eine Menge AnsiStrings verwendet. Ich vermute, dass der Speicher fragmentiert wird und deshalb neuer Speicher angefordert wird, weil in dem alten nicht mehr genügend freier Speicher am Stück vorhanden ist.



  • Danke für die Anregung. Ich werde gleich versuchen statt der Tabelle ein Array
    zu verwenden.



  • Array? Wo hab ich das denn geschrieben?

    Die Frage ist eher, woher diese 64000 Zeilen kommen? Wieso müssen die in einem StringGrid dargestellt werden (64000 Zeilen schaut sich kein Mensch an, schon gar nicht in 2 Minuten)?
    Rück ein paar mehr Informationen raus, dann kann man vielleicht konkrete Vorschlöge machen.



  • Die Daten bekomme ich über den CAN-Bus zugeschickt.
    Und die Tabelle war nur für schnelles Debugging gedacht. Die Tabelleninhalte sind Float-Zahlen und werden alle 2 Minuten visualisiert.



  • Ja, aber warum willst Du die Daten anzeigen? Reicht es nicht, die in eine Datei zu schreiben.

    CAN-Bus klingt sehr nach Messtechnik. Falls ja: Meiner Erfahrung nach, interessieren den User die Werte nicht, so lange die in Ordnung sind. Meist sind nur die Ausreißer interessant und auch nur die sollten angezeigt werden.



  • Ja, das wird ein billige Variante eines Oszilloskop mit sehr vielen Kanälen.
    Und die muss ich alle anzeigen.

    Aber egal, ich hab das jetzt mit einem Array statt mit TStringGrid programmiert.
    Das verbraucht etwas weniger Ressourcen.
    Trotzdem vielen Dank für die Vorschläge.


Anmelden zum Antworten