none
Grosse Datenmengen im Hintergrund und Abhängigkeit der Bandbreite kopieren RRS feed

  • Frage

  • Hallo zusammen,

    ich habe eine Idee zu einem neuen Projekt, aber hier komme ich in ein Gebiet mit dem ich noch nichts gemacht habe.

    Es sollen zum Teil grosse Datenmengen kopiert werden, ein File kann durchaus 800MB und mehr haben. Kopiere ich das über den Datei-Explorer auf den Server, wird die Netz-Verbindung stark beeinträchtigt und ein weiteres arbeiten ist dann recht schwierig da es auf alle Programme wie Outlook etc Einfluss hat.

    Wie kann ich sicherstellen das beim kopieren zum Beispiel nur 10% der System-Performance beeinflusst wird? BITS? Gibt es dazu schon eine Lösung mit der ich per VB.net arbeiten könnte?

    Da ich hier noch keine Berührungspunkte habe und ein maximum an System-Performance bereitgestellt werden soll, wäre ich über Eure Hilfe sehr dankbar. Eventuell gibt es bereits etwas was ich nutzen kann?

    Viele Grüsse,
    Maximilian

    Montag, 5. Dezember 2011 09:23

Antworten

  • Hallo MaxiTesch,

    tut mir leid, dass es zwischenzeitlich etwas gedauert hat, aber ich musste noch ein Projekt beenden. ;-)

    Viel mehr als Ellen und ich vorgeschalgen haben kannst du softwareseitig nicht tun. Wenn die Bedingungen die die Hardware bietet (wie in deinem Fall) nicht optimal sind, kann Software dies nicht ausbügeln. Hardware ist immer die Grundlage, und Software kann max. dass, was die Hardware auf der oder mit der sie läuft zulässt.

    Solltest du noch Fragen haben, stehe ich gerne zu deiner Verfügung.

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Montag, 12. Dezember 2011 11:38
  • Hallo MaxiTech und Holger,

    Multithreading Backup Utility

    http://www.codeproject.com/KB/vb/Multithreaded.aspx

    Ich habe einen geigneten code gefunden.

    @Maxitech. Es wird etwas Arbeit auf Dich zukommen. Das Studium des System.Threading namespace ist erforderlich. Der code von msdn, den ich oben gepostet habe, dürfte Dir den Einstieg erleichtern. Das Kopieren geht nicht nur auf lokalen Laufwerken, sondern auch auf Netzwerken, wie Du sehen kannst.

    Vielleicht konnte ich Dir helfen

    schöne Grüsse Ellen

     

     


    Ich benutze/ I'm using VB2008 & VB2010
    Montag, 12. Dezember 2011 18:57

Alle Antworten

  • Hallo Maximilian,

    mein Vorschlag wäre das Kopieren von Dateien auf einem sekundären thread abzuwickeln. Mit der Priority Property Kannst Du die Performance beinflussen. In diesem Sample arbeitest Du in der ThreadMethod die Copy Method (String, String) Methode ein.

    Leider kann ich Dir keinen fertigen Code geben. Vielleicht hat jemand einen.

    schöne Grüsse Ellen

     


    Ich benutze/ I'm using VB2008 & VB2010
    Montag, 5. Dezember 2011 17:50
  • Hallo Maximilian,

    die .net Streams versuchen natürlich, die Daten so flott wie möglich zu transportieren. Dies dürfte auch in in den meisten aller Fälle so gewünscht sein.

    Neben den Vorschlägen von Ellen, möchte ich dir weitere Tipps auf den Weg geben. Ich würde die Daten vorher durch den GZipStream jagen, um diese vor dem Transport zu komprimieren. Primär Textdateien (z.B. XML) dürften davon nicht unwesentlich profitieren. Um den Vorgang weiter zu beschleunigen solltest du den ausgehenden Stream mit Hilfe der Klasse   BufferedStream puffern. Insbesondere Veribindungen mit langsameren/schwankenden Endpunkten profitieren hierbei.

    Ich hoffe, ich konnte dir mit meinen Tipps helfen, näher an dein Ziel zu kommen :-)

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Montag, 5. Dezember 2011 19:53
  • Hallo zusammen,

    vielen Dank für die Infos, leider wird GZipStream vermutlich nicht helfen da es sich in aller Regel um ZIP-Files handeln wird, BufferedStream wäre aber eine Möglichkeit um die Sicherheit zu erhöhen. Die anderen Infos zielen auf den lokalen Rechner ab, mittlerweile weiss ich mehr, es trifft dann besonders die Bandbreite.

    Ich habe mal weiter nachgefragt um meine Anforderungen zu definieren. Das Gerät vom dem aus die Datei kopiert werden muss ist an einer doch recht stark schwankenden Leitung deren Bandbreite zu häufig ändert.

    Bei einem Versuch habe ich mal eine grosse Datei kopiert, zu diesem Zeitpunkt verringerte sich auch gleich die Bandbreite und danach konnte man tatsächlich am System nicht mehr arbeiten. Auch wenn der Rechner noch einigermassen reagierte, ein eMail Empfang oder Interne-Zugrif war schlichtweg eine Qual.

    Ich werde wohl doch eher mit BITS arbeiten müssen, scheint immer mehr darauf abzuzielen.

    Gruss,
    Maximilian

    Dienstag, 6. Dezember 2011 17:44
  • Hallo MaxiTesch,

    tut mir leid, dass es zwischenzeitlich etwas gedauert hat, aber ich musste noch ein Projekt beenden. ;-)

    Viel mehr als Ellen und ich vorgeschalgen haben kannst du softwareseitig nicht tun. Wenn die Bedingungen die die Hardware bietet (wie in deinem Fall) nicht optimal sind, kann Software dies nicht ausbügeln. Hardware ist immer die Grundlage, und Software kann max. dass, was die Hardware auf der oder mit der sie läuft zulässt.

    Solltest du noch Fragen haben, stehe ich gerne zu deiner Verfügung.

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Montag, 12. Dezember 2011 11:38
  • Hallo MaxiTech und Holger,

    Multithreading Backup Utility

    http://www.codeproject.com/KB/vb/Multithreaded.aspx

    Ich habe einen geigneten code gefunden.

    @Maxitech. Es wird etwas Arbeit auf Dich zukommen. Das Studium des System.Threading namespace ist erforderlich. Der code von msdn, den ich oben gepostet habe, dürfte Dir den Einstieg erleichtern. Das Kopieren geht nicht nur auf lokalen Laufwerken, sondern auch auf Netzwerken, wie Du sehen kannst.

    Vielleicht konnte ich Dir helfen

    schöne Grüsse Ellen

     

     


    Ich benutze/ I'm using VB2008 & VB2010
    Montag, 12. Dezember 2011 18:57
  • Hallo MaxiTech, hallo Ellen,

    wenn ich MaxiTech richtig verstanden habe, geht es darum, die begrenzte Bandbreite innerhalb eines bestimmten Netzwerks möglichst optimal zu nutzen. Das Multithreading würde dabei helfen, die Performance auf dem PC zu beschleunigen bzw. erst sauber zu ermöglichen, aber sie ändert nichts daran, dass die Datenmenge groß und die Bandbreit klein/unzuverlässig ist. Daran kann auch Multithreading nichts ändern.

    Sollte ich dich, MaxiTech, falsch verstanden haben, so bitte ich um Entschuldigung und um eine Klarstellung des Sachverhalts.

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Montag, 12. Dezember 2011 20:19
  • Hallo MaxiTech, hallo Ellen,

    wenn ich MaxiTech richtig verstanden habe, geht es darum, die begrenzte Bandbreite innerhalb eines bestimmten Netzwerks möglichst optimal zu nutzen. Das Multithreading würde dabei helfen, die Performance auf dem PC zu beschleunigen bzw. erst sauber zu ermöglichen, aber sie ändert nichts daran, dass die Datenmenge groß und die Bandbreit klein/unzuverlässig ist. Daran kann auch Multithreading nichts ändern.

    Sollte ich dich, MaxiTech, falsch verstanden haben, so bitte ich um Entschuldigung und um eine Klarstellung des Sachverhalts.

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es


    Hallo Holger,

    Du hast Recht. Das threading bringt nicht alleine eine Verringerung der Geschwindigkeit der Datenübertragung. Maximilian muss an den Datenstrom ran und diesen verlangsamen. Das würde gelingen mit der Stream klasse. Hier habe ich ein Beispiel wie man mit der Write-Methode blockweise lesen und schreiben kann. Da müssten nur noch Verzögerungsschleifen hinein. z.B. thread.Sleep(10) ....

    schöne Grüsse Ellen


    Ich benutze/ I'm using VB2008 & VB2010
    Dienstag, 13. Dezember 2011 12:59
  • Hallo MaxiTesch,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Freitag, 16. Dezember 2011 09:30
  • Hallo zusammen,

    sorry für die späte Antwort, musste kurzfristig auf Reise.

    Also, vorrangig geht es mir darum die Bandbreite optimal auszunutzen ohne das diese "zusammenbricht". Eine weitere Anforderungen wäre mittlerweile die Dateien Job-weise auszuführen, damit nicht der ganze Prozess gestoppt wird wenn ein Fehler auftritt.

    Interessant wäre auch so eine Art Upload-Manager der nach Ausfall des Netz (oder wenn das Gerät neu gestartet wird) den Upload wieder fortsetzt.

    Wird langsam recht anspruchsvoll.

    Wenn Euch noch was einfällt wäre ich dankbar, ich suche mal weiter nach einer Lösung wie das klappen könnte.

    Viele Grüsse,
    Maximilian

    Freitag, 16. Dezember 2011 21:10