Seite 3 von 7
Verfasst: 02.09.2005 19:59
von Kiffi
Hallo Lukaso,
sorry, dass ich mich nicht früher gemeldet habe. Dein Beitrag ist mir durch
die Lappen gegangen.
> Ich glaube ich habe dass Problem, dass die Recordsets nicht
> Freigegeben werden.
> [...]
> Hättest du ne ahnung an was das liegen könnte?
nee, leider nicht. Kannst Du mir einen kleinen Beispielcode zuschicken,
anhand dessen ich das ausprobieren kann?
Danke & Grüße ... Kiffi
Verfasst: 24.09.2005 01:02
von nicolaus
@kiffi
Wie kann ich denn mit der lib auch auf ne db im web zugreifen oder ist das überhaupt mit der lib möglich?
Verfasst: 26.09.2005 23:40
von Kiffi
nicolaus hat geschrieben:Wie kann ich denn mit der lib auch auf ne db im web zugreifen oder ist das überhaupt mit der lib möglich?
sorry für die späte Antwort!
Also, ich kann es nicht mit 100%iger Sicherheit sagen, aber ich denke, dass
es generell nicht möglich ist, auf eine im Web liegende SQLite-Db
zuzugreifen. Ich lasse mich da aber auch gerne eines besseren belehren.
Wenn Du Windows-Webspace hast, könnte man überlegen, auf Deinem
Space ein CGI zu basteln, welches die dortige DB konnektieren kann und die
Daten dann via XML (HTML, Text oder sonst ein anderes Format) an den
Client streamt.
Grüße ... Kiffi
Verfasst: 08.10.2005 20:38
von Lukaso
Hallo kiffi,
ich habe ein neues Problem. Das alte Problem hat sich gelöst, nur leider hab ich irgendwie vergessen, zu schreiben (habe meine verwaltung neu gschrieben, dabei hat sich das von selbst gelöst). Aber jetzt habe ich ein neues Problem, auch mit der Speicherbelegung. Ich habe für die Verwaltung meiner Playlisten Proceduren. Damals lag mein Speicherverbrauch bei 500 Liederwechsel bei 100MB. Ein liederwechel führt ~3 Datenbankabfragen aus. Jetz liegt mein Speicherverbrauch bei 50000 liederwechsel bei 40MB. Ich denke, dass liegt an dem "Deftype. s_RecordSet RS". Ich muss für jede Procedure diesen Befehl ausführen. Ist es möglich dies Irgendwie global festzulegen? Hab noch nie DefType benutzt.
Danke Lukas

Verfasst: 09.10.2005 00:22
von Kiffi
> Ich denke, dass liegt an dem "Deftype. s_RecordSet RS". Ich muss für
> jede Procedure diesen Befehl ausführen.
[c]Deftype.s_RecordSet RS[/c] ist das selbe, als ob Du [c]RS.s_RecordSet[/c]
schreibst. Es ist lediglich eine Festlegung, von welchem Typ die Variable
RS ist. Wenn Du [c]sDummy.s[/c] schreibst, dann ist die Variable [c]sDummy[/c] vom
Typ String. Und so wie oben geschrieben, ist die Variable RS vom Typ
s_RecordSet.
> Ist es möglich dies Irgendwie global festzulegen?
[c]Global RS.s_RecordSet[/c]
> Hab noch nie DefType benutzt.
schau Dir mal an, was die PB-Hilfe zum Thema DefType schreibt.
Dennoch kann das nicht der Grund für den Speicherverbrauch sein.
Kleiner Tipp: Falls noch nicht geschehen, solltest Du nach der Verwendung
von RS den angeforderten Speicherbereich mittels [c]SQLite3_ReleaseRecordset(@RS)[/c]
wieder freigeben.
Grüße ... Kiffi
Verfasst: 09.10.2005 00:43
von Lukaso
Stimmt, an dem Recordset lags nicht. ReleaseRecordset mache ich nach jedem aufruf. Allerdings steigt der verbrauch trotzdem.
Code: Alles auswählen
Procedure Playlist_GetElementPos(dbHandle, Id)
DefType.RecordSet RS
If SQLite3_GetRecordset("Select * From Elements WHERE Id = " + Str(Id), dbHandle, @RS)
If RS\Handle
If SQLite3_GetRecordsetValueByName("Position", @RS)
ProcedureReturn Val(RS\sValue)
EndIf
SQLite3_ReleaseRecordset(@RS)
Else
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Die o.g. Procedure führ ich bei mir 50000 durch, und der Speicherverbraucht steigt dabei auf 40MB, mache ich etwas falsch?
MFG Lukas
Verfasst: 09.10.2005 00:52
von Kiffi
> mache ich etwas falsch?
sieht nicht so aus...
Ich werde mir morgen die Lib noch mal etwas genauer anschauen und mich
dann hier melden.
Grüße ... Kiffi
Verfasst: 09.10.2005 00:55
von ts-soft
Ich denke mal, wenn die Procedur nach dem ersten ProcedureReturn verlassen wird, dieses: SQLite3_ReleaseRecordset(@RS) nie ausgeführt wird
Verfasst: 09.10.2005 01:01
von Kiffi
> Ich denke mal, wenn die Procedur nach dem ersten ProcedureReturn
> verlassen wird, dieses:
SQLite3_ReleaseRecordset(@RS) nie
> ausgeführt wird
Aargh! Gut ausgepasst, Thomas!

Hatte ich übersehen.
@Lukaso:
Probier mal das:
Code: Alles auswählen
Procedure Playlist_GetElementPos(dbHandle, Id)
DefType.RecordSet RS
RetVal = #False
If SQLite3_GetRecordset("Select * From Elements WHERE Id = " + Str(Id), dbHandle, @RS)
If RS\Handle
If SQLite3_GetRecordsetValueByName("Position", @RS)
RetVal = Val(RS\sValue)
EndIf
SQLite3_ReleaseRecordset(@RS)
EndIf
EndIf
ProcedureReturn RetVal
EndProcedure
Grüße ... Kiffi
Verfasst: 09.10.2005 10:32
von Lukaso
Danke an euch beide, jetzt hab ich schicke 6,5MB nach 50000 Liederwechsel.
Man lernt nie aus
Lukas