mysql_free_result zu langsam



  • hallo allerseits,
    ich nutze vc++ und greife direkt über die c-Api auf mysql.
    Immer wenn ich ziemlich große datenmengen mit mysql_free_result freigeben möchte (50000 Zeilen), stoppt das programm für ein paar sekunden (keine Reaktion)...
    Weiß jemand was das ist und wie man es losen kann?

    Danke im Voraus...



  • egal schrieb:

    Weiß jemand was das ist[?]

    Das ist die freigabe deiner Query Resultate.

    egal schrieb:

    [Weiß jemand] wie man es losen kann?

    Versuchs doch mit Threads.



  • Danke, das ganze läuft schon in ein Thread... Soll ich noch ein zweiten nur für die Freigabe machen? Es ist so, im Hauptthread wird eine CListCtrl gezeigt, ein zweiten Thread wird gestartet um die Daten aus der Datenbank zu hollen und in diese Liste zu zeigen... Soll ich jetzt noch einen Thread bauen um die daten wieder freizugeben?



  • egal schrieb:

    Soll ich jetzt noch einen Thread bauen um die daten wieder freizugeben?

    Nein, wenn das so läuft, wie du beschrieben hast und in einem parallelen Thread die Nachrichtenverarbeitung für das Fenster abläuft, dann sollte das garnicht auftreten. Das problem könnte sein, dass wärend der Freigabe, sehr viele Daten aus der Auslagerungsdatei, wieder in den Arbeitsspeicher geholt werden müssen. Dann kannst du an deinem Programm nicht mehr viel ändern, damit es besser wird.

    Du könntest mit der Anweisung "LIMIT" nicht alle Daten auf einmal abfragen, sondern dich in Packen von z.B. 100 Resultaten durch die Datenbank arbeiten.



  • Da die C-API mit use_result alles Daten in den Speicher packt und sich auch um die Speicherreservierung kümmert sind da eben viele Daten drin. Du könntest store_result verwenden. Dann bleiben die Daten auf dem Server. Ich rate dir aber davon ab weil du dann bestimmte features nicht mehr hast. z.B. Anzahl Datensätze, fetch durch die Menge ind jede richtung, blockieren des servers, etc.

    Der Speicher muss eben freigegeben werden. Wie schon gesagt wurde kann es auch an zu vielen Daten und wenig speicher liegen.
    BIst du sicher das es an mysql_free_result liegt und nicht an der Ausgabe oder löschen des ListCtrl?
    Wer kann sich schon 50000 Datensätze auf einmal ansehen.
    LIMIT wurde da auch schon gesagt.



  • Danke für die Antworten...
    @Unix-Tom: Ja, das liegt an mysql_free_result, wenn ich ein breakpoint setze, bleibt er da ein paar sekunden stehen bevor er weiter geht...
    An ein Limit, habe ich auch schon gedacht... Muss ich halt fragen ob den Kunde das reicht...



  • würds nich gehen einfach in (beispielsweise) 250er schritte die gesammten daten zu laden und free'en?



  • sorry leute, das ist echt Dumm aber Unix-Tom hatte doch recht... Es liegt nicht an mysql_result_free sondern an das Löschen des ListCtrl... weiß einer wie man das lösen kann? Ihr könnt mich auch ruhig nach mfc verschieben... 😃
    Das hat wohl mit Datenbanken gar nichts mehr zu tun...
    Trotzdem Danke für eure Hilfe...



  • Das Problem kannst du genau so lösen. Geh schrittweise vor. Mach einfach zwei Buttons, wo der Benutzer zu den nächsten oder den vorigen 100 Resultaten blättern kann. Schau dir mal an, wie es "die Großen" machen und stell die mal vor, Google würde alle Resultate auf einer Seite ausgeben 😉



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum Datenbanken in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten