AGB  ·  Datenschutz  ·  Impressum  







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

"Aggressiver" downloaden?

Ein Thema von Medium · begonnen am 5. Aug 2012 · letzter Beitrag vom 7. Aug 2012
 
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

"Aggressiver" downloaden?

  Alt 5. Aug 2012, 15:10
Schmucken Sonntag wünsch ich!

Ich habe ein Programm zur Archivierung von Sicherheitskamerabildern gebaut, bin aber etwas unzufrieden mit meinem Download der Einzelbilder. Technisch sieht das ganze so aus, dass es 17 Kameras sind, die alle ihre Bilder auf einen Webserver packen. Das aktuelle Bild ist also pro Kamera je unter einer URL zu finden. Ich habe jetzt mit C# (war so gewünscht) einen Client gebaut, der in je einem Thread pro Kamera die Bilder abruft, und zunächst mit Datum auf die Platte wirft (später soll mal ein Video daraus werden).

Das Problem ist: Wenn ich die zu den Kameras gehörende Weblösung benutze, bekomme ich deutlich öfter ein neues Bild als mit meiner Lösung. Irgend etwas bremst mich, ich weiss aber nicht was. Selbst wenn ich Weblösung und mein Programm auf ein und der selben Kiste gleichzeitig laufen habe, ist der Webclient erheblich flotter am Werke.
Das Snippet welches bei mir den Download macht: (Dies ist mein Thread-Loop, von dem einer für jede Cam läuft.)
Code:
private void DownloadCycle()
{
   while (!Terminated)
   {
      try
      {
         if (!Paused)
         {
            if (WC == null)
            {
               WC = new WebClientTimeOut();
               WC.TimeOut = 2000;
            }
            bool picOK = true;
            byte[] tmp = new byte[0];
            try {tmp = WC.DownloadData(URL);} catch {picOK = false;}
            if (picOK)
            {
               Image tmpImg = Image.FromStream(new MemoryStream(tmp));
               DateTime newDate = DateTime.Now.Date;
               if (newDate > Today)
               {
                  Today = newDate;
                  CurrentDir = BaseFolder+Today.ToString("yyyyMMdd")+"\\";
                  Directory.CreateDirectory(CurrentDir);
               }
               tmpImg.Save(CurrentDir + DateTime.Now.ToString("HHmmss-fff")+".jpg");
            }
         }
      }
      catch
      {} // Ja böse, aber ich will einfach nur, dass der Thread weiter rennt, egal was passiert =)
   }
}
Die Klasse WebClientTimeOut ist ein aufgebohrter WebClient, da diese sonst den Timeout des WebRequest nicht weiterreicht:
Code:
public class WebClientTimeOut : WebClient
{
   protected override WebRequest GetWebRequest(Uri address)
   {
   WebRequest webRequest = base.GetWebRequest(address);
   webRequest.Timeout = TimeOut;
   return webRequest;
   }
   public int TimeOut { set; get; }
}
Einen Timeout < +inf brauche ich, da ab und an die Requests arg lange dauern. Zwar selten, aber kam schon vor.


Teilweise bekomme ich nur 2-3 Bilder pro Minute, während der Webclient sekündlich ein neues Bild zeigt. Wie könnte ich das auch schaffen?
Besten Dank im Voraus, und schönes Rest-Wochenende noch!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
 


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 15:02 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