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. :oops:

> 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 :allright:

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! :allright: 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 :D

Lukas