![]() |
Speicherüberlauf nach ca. 5 Minuten
Moin
Ich veruche eine kleine Applikation zu entwickeln, mit der es möglich ist Web-TV Streams abzuspielen. Ich benutze dafür das OLE Objekt WindowsMediaPlayer aus der ActiveX-Palette. In soweit ist es eigentlich kein Problem eine solch simple Anwendung zusammen zu schieben, wenn da nicht folgendes Problem wäre: Nach dem Start der Anwendung kann ich im Taskmanager/Prozesse zusehen, das der Speicher immer voller wird. Gleiches trifft für die CPU-Auslastung zu. Irgenwann hängt die Anwendung. In der Hoffnung das ich in der richtigen Sparte gelandet bin, stellt sich mir nun folgende Frage. Wie könnte man dieses Problem entgegnen? Jeder Lösungsansatz könnte helfen. |
Re: Speicherüberlauf nach ca. 5 Minuten
Zitat:
|
Re: Speicherüberlauf nach ca. 5 Minuten
Das habe ich mir auch schon überlegt. Die klare Antwort lautet Ja. Sowie das Puffern des Streams beendet ist, wird ein Timer auf True gesetzt, der mir über ein Label die aktuelle Position des Clips ausgibt.
Delphi-Quellcode:
procedure TVideoStreaming.Timer1Timer(Sender: TObject);
begin Label1.Caption:=WindowsMediaPlayer1.status; if vergleicheStringsN(Label1.Caption, Label2.Caption, 10)=True then begin Label3.Caption:=WindowsMediaPlayer1.controls.currentPositionString; //Hier benötige ich den Timer Label3.Visible:=True; Label4.Caption:=WindowsMediaPlayer1.currentMedia.name; Label4.Visible:=True; Label5.Caption:=WindowsMediaPlayer1.currentMedia.durationString; Label5.Visible:=True; end else begin Label3.Visible:=False; Label3.Caption:=''; Label4.Visible:=False; Label4.Caption:=''; Label5.Visible:=False; Label5.Caption:=''; end; end; |
Re: Speicherüberlauf nach ca. 5 Minuten
Zitat:
Wie sieht die Funktion "VerarbeiteStringsN" aus? |
Re: Speicherüberlauf nach ca. 5 Minuten
Ich glaube nicht, dass es etwas mit der Funktion zutun hat.
Delphi-Quellcode:
Diese soll lediglich zwei Strings vergleichen. String1 hat einen festen Wert "Wiedergabe". Innerhalb der Timer Prozedur wird nun periodisch verglichen. Nach den Puffern bekommt String2 den Wert "Wiedergabe". Also ist es True. Ich hoffe ich habe mich verständlich ausgedrückt. :?
function vergleicheStringsN(s1, s2:string; n:Word): Boolean;
var i: Word; function delLZ(s: string): string; var ss: string; i, j: Word; begin j:=0; ss:=''; for i:=1 to Length(s) do begin if (s[i] <> ' ') and (s[i] <> '-') then begin Inc(j); ss:= ss + s[i] end; if j=n then Break end; Result := UpperCase(ss) end; begin if delLZ(s1)=delLZ(s2) then Result:=True else Result:=False; end; var flag:word; Übrigens der Timer wird schon mit Klick auf Play auf True gesetzt. Der Timer bleibt solange True, bis ich die Wiedergabe beende. Ich vermute schon, dass es am Timer liegt. |
Re: Speicherüberlauf nach ca. 5 Minuten
ich glaub schon das es was damit zu tun hat. Du fragmentierst den Speicher nich unerheblich wenn du ständig "String = String + Irgendwas" aufrufst. Du solltest vorher einmal mit SetLength die Länge setzen und dann nur noch in dem allocierten Speicher schreiben.
|
Re: Speicherüberlauf nach ca. 5 Minuten
Volltreffer! Ich hebe mal den Vergleich ausserhalb der Timerprozedur vorgenommen und siehe da, gleichbleibende Auslastung und Speicherbelegung. Danke.
Edit: Length Vergleich würde mir nichts bringen, da hinter "Wiedergabe" noch die Bitrate erscheint. Diese kann stark schwanken. So lasse ich nur die ersten 10 Zeichen überprüfen. Trotzdem Danke auch für diesen Hinweis. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz