AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherüberlauf nach ca. 5 Minuten

Ein Thema von mlspider · begonnen am 27. Jan 2007 · letzter Beitrag vom 27. Jan 2007
Antwort Antwort
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#1

Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 07:58
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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#2

Re: Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 09:27
Zitat von mlspider:
Wie könnte man dieses Problem entgegnen?
Allozierst du irgendwo Speicher, den du nicht freigibst? 'N bisschen QT wäre nicht schlecht...
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 09:36
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;
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#4

Re: Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 09:42
Zitat von mlspider:
Die klare Antwort lautet Ja.
Und wo?

Wie sieht die Funktion "VerarbeiteStringsN" aus?
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 09:51
Ich glaube nicht, dass es etwas mit der Funktion zutun hat.

Delphi-Quellcode:
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;
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.

Ü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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 10:19
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Speicherüberlauf nach ca. 5 Minuten

  Alt 27. Jan 2007, 10:24
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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz