ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
1666
1666
EMPFEHLEN
-
Hallöchen
Ich habe da mal wieder ein kleines Problem...
Ich habe einen Ordner in dem in Unterverzeichnissen ca. 100.000 nach einem Chema gespeichert, bei dem ich mit einem Schlagwort die Bilder zum entsprechenden Thema finde. Damit es nicht immer eine Ewigkeit dauert habe ich mir eine MySql Datenbank erstellt, in der mit einer Schleife und dem Filesystemobject die Ordner rekursiv durchsucht und eingetragen werden. Das funktioniert prächtig.
Leider hat diese Schleife aber den NAchteil, das der Arbeitsspeicher bei jedem Durchlauf kontunuierlich voll läuft. Das waren zuletzt fast 1,9 GB !
Daher meine Frage: Gibt es einen Befehl der den Arbeitsspeicher "entlastet" ?
So als Idee...Führe Schleife aus und gebe die Ressourcen wieder frei
Im voraus vielen Dank!!Schweigen ist auch eine Art um mangelndes Wissen zu verbergen
-
Zeig doch mal ein wenig Code, damit wir einen Ansatz haben mit welchen VB-Methoden du da arbeitest
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Bitte schön..
)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
Private Sub eintragMP3(ByVal song As String) '// Verbinung herstellen oConn.OpenConnection HOST, USER, PASS, DB '// Songtitel in Statusbar angeben StatusBar1.Panels(1).Text = "Trage ein: " & song '// Einfache Slash gegen doppelte Slash tauschen strDBfile = Replace(song, "\", "\\") '// Datenbank störende Zeichen ersetzen strDBfile = Replace(strDBfile, "'", "") strDBfile = Replace(strDBfile, "´", "") strDBfile = Replace(strDBfile, "`", "") '// Titel und Pfad zerlegen ssong = Split(strDBfile, "\\") nameSong = ssong(UBound(ssong)) nameSong = Replace(nameSong, ".mp3", "") '// Prüfen ob DAtei schon in Datenbank vorhanden Set oRs = oConn.Execute("select * from " & TABLE & " where name = '" & nameSong & "' and pfad = '" & strDBfile & "'") '// Anzahl prüfen If oRs.RecordCount > 0 Then GoTo errHnd '// Titel in Datenbank eintragen oConn.Execute ("insert into " & TABLE & " (name, pfad, chksumm, playcount) values ('" & nameSong & "','" & strDBfile & "','#',0) ") DoEvents '// Fehler abfangen If oConn.Error.Number = 0 Then '// Anzahl der in der Datenbank gesoeicherten Songs Set oRs = oConn.Execute("select * from " & TABLE & "") '// Anzahl ausgeben lblSave.Caption = oRs.RecordCount Else '// Anzahl Erro Dateien ausgeben lblError.Caption = lblError.Caption + 1 End If errHnd: '// Recordset freigeben Set oRs = Nothing '// Datenbankverbindung schliessen oConn.CloseConnection End Sub
Hier wird einfach ein Pfad übergeben der eingetragen werden soll.Schweigen ist auch eine Art um mangelndes Wissen zu verbergen
-
Arbeitest du mit ADO, DAO, ODBC oder mit was?
item: Den Recordset solltest du schliessen bevor du in mit Nothing oder einem neuen Inhalt überschreibst (Call oRs.close)
item. Wozu den oRs.FillCache ? Den brauchst du da mMn nicht. Frisst auch nur speicher.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke für deine Antwort.
Ich arbeite mit einer dll mit der es möglich ist MySql DAtenbanken direkt anzusprechen.
Habe die Recodset explicit geschlossen. Bingt aber auch nichts. Wie kommst du auf
Nach jedem Eintrag in die Datenbank sind ca 100kB Speicher mehr belegt.oRs.FillCache ?Geändert von spirit (14.12.09 um 14:15 Uhr)
Schweigen ist auch eine Art um mangelndes Wissen zu verbergen
-
Ups, mein Fehler. Ist da reingerutscht als ich im VBA die methoden von DAO.Recordset durchsuchte und nachher hab ich nicht mehr gemerkt das es von mir ist (telefonische Ablenkung).
Es gibt noch 2 Orte wo ich etwas vorstellen kann.
1) das dll gibt den Speicher nicht frei -> Doku zum dll sollte auskunft geben wie man den Speicher frei gibt.
2) du löst die Liste nicht sauber auf, wo die Files durchgeackert werden. Der Speicherverbrauch ist dann nicht auf Seite MySQL/dll sonder im Code von dir. Dies kann ich aber anhand des geposteten Codes nicht beurteilen---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
mehr Code gibt es da nicht...der geposteten Prozedur wird lediglich ein pfad aus einem FileSystemObjekt übergeben.....
Schweigen ist auch eine Art um mangelndes Wissen zu verbergen
-
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Aus einer Dirbox übergebe ich per Klick den Pfad:
Code :1 2 3 4 5 6 7 8 9 10 11 12
Private Sub cmdSuche_Click() '// Objektzuweisung Set objFSO = New Scripting.FileSystemObject '// Dateien suchen FindFiles Dir1.Path, "*.mp3" '// Variable initialisieren lngCount = 0 End Sub
mit dem Aufruf wird der Startpfad übergeben:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
Private Sub FindFiles(ByVal vsFolderPath As String, ByVal vsSearch As String) '// Verweis auf den zu durchsuchenden Ordner setzen: Set objFolder = objFSO.GetFolder(vsFolderPath) '// Alle Dateien mit allen Attributen suchen strFileName = Dir$(objFSO.BuildPath(objFolder.Path, vsSearch), _ vbNormal Or vbHidden Or vbSystem Or vbReadOnly) '// So lange Dateien im Ordner vorhanden sind... Do While Len(strFileName) > 0 '// Zaehler erhöhen lngCount = lngCount + 1 '// Anzahl ausgeben Label5.Caption = lngCount '// Dateinamen übergeben strFile = objFSO.BuildPath(objFolder.Path, strFileName) '// Statusbar rot markieren Shape1.BackColor = &HFF& DoEvents '// Datei in Datenbank eintragen eintragMP3 strFile '// Warteschleife für 1 Sekunde 'Sleep (20) '// Statusbar wieder grün markieren Shape1.BackColor = &HFF00& DoEvents '// Zähler für Dateien erhöhen lngFileCount = lngFileCount + 1 '// Nächste Datei suchen strFileName = Dir$() Loop '//Wenn Unterordner vorhanden sind... If objFolder.SubFolders.Count > 0 Then '// Alle Unterordner durchsuchen... For Each objFolderLoop In objFolder.SubFolders '//Funktion erneut aufrufen FindFiles objFolderLoop.Path, vsSearch '// nächstes Objekt Next objFolderLoop If objFolderLoop Is Nothing Then GoTo errHnd End If Exit Sub errHnd: '// Verbinung herstellen oConn.OpenConnection HOST, USER, PASS, DB '// Anzahl Datenbankeinträge auslesen Set oRs = oConn.Execute("select name from " & TABLE & "") '// Anzahl ausgeben lblSave.Caption = oRs.RecordCount '// Recordset schliessen oRs.CloseRecordset '// Recordset freigeben Set oRs = Nothing '// Dartenbankberbindung trennen oConn.CloseConnection '// Meldung ausgeben MsgBox "Fertig...", vbOKOnly + vbInformation, App.Title End Sub
Ohne den Eintrag:
Code :1
eintragMP3 strFile
bleibt der Speicher konstant. Also muss es etwas mit der Mysql DB zu tun zu habenSchweigen ist auch eine Art um mangelndes Wissen zu verbergen
-
31.05.10 11:45 #10tintin Tutorials.de Gastzugang
Hallo spirit,
hast Du eigentlich eine Antwort auf Dein Problem:
>>>>>Nach jedem Eintrag in die Datenbank sind ca 100kB Speicher mehr belegt.
bekommen?
Ich habe nämlich genau das gleiche und weiss nicht weiter.
Gruß tintin
Ähnliche Themen
-
Speicher freigeben
Von Jennesta im Forum C/C++Antworten: 5Letzter Beitrag: 06.07.10, 23:14 -
Applet und JVM Speicher wieder freigeben
Von eusti im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 27.06.06, 19:40 -
Gleich mehrere Problem (gloables Objekt anlegen, dynamischen Speicher freigeben)
Von RuFFnEcK im Forum VisualStudio & MFCAntworten: 6Letzter Beitrag: 07.02.05, 18:49 -
[C++] Struct neu initialisieren & Speicher freigeben
Von Ezzz im Forum C/C++Antworten: 3Letzter Beitrag: 01.11.03, 11:19 -
[C++] calloc, speicher wieder freigeben
Von Crayzee Ivan im Forum C/C++Antworten: 4Letzter Beitrag: 12.08.02, 10:00





Zitieren


Login





