Niedrige Übertragungsrate



  • Hallo!

    Ich habe ein sehr sehr unglückliches Performance-Problem: Mein Programm kopiert 3 Dateien parallel. Dazu erstelle ich drei Threads. Das Programm ist so aufgebaut:

    .exe-Datei / Hauptprozess
    Zeigt den Dialog an und ist zuständig, dass das Programm noch auf Buttonklicks reagiert

    MainThread
    Startet 3 Threads und wartet auf deren Ende mit WaitForSingleObject()

    Thread1, Thread2, Thread3
    Kopieren alle mit CopyFileEx() drei verschiedene Dateien

    Wenn ich mit dem Explorer kopiere, zeigt mir der TaskManger eine Netzwerkauslastung von 60% (immer noch wenig, aber immerhin) an.
    Wenn mein Programm kopiert, 30% !!!
    CPU-Auslastung liegt bei 11%

    Ich versteh' das absolut nicht, da mein Programm ja darauf wartet, dass externe Funktionen (CopyFileEx(), WaitForSingleObject()) returnieren. Das Hauptprogramm hat ja auch nichts zu tun, so lange ich nicht mit dem Dialog interagiere.

    Meine Frage ist jetzt: Wo bleibt die Performance liegen??

    Würd' mich echt freun, wenn mir jemand einen Tipp geben könnte.....



  • Kopierst du gleichzeitig Dateien von Rechner A zu Rechner B und von Rechner B zu Rechner A?
    Nur dann lassen sich 100% Netzwerkauslastung erreichen. Die Prozent, die angezeigt werden, beziehen sich nämlich auf Down- und Upload zusammen, also Datenverkehr in beiden Richtungen. Wenn du nur von einem Rechner eine Datei auf einen anderen schiebst, wird der Wert sich nicht großartig über 50% aufhalten. Es wird ja nur die Hälfte der möglichen Bandbreite benutzt.

    Zu deinem Programm:
    Mach doch mal ein kleines Konsolenprogramm ohne Multithreading, dass nichts weiter macht als mit CopyFileEx die Dateien zu verschieben. Wenn dabei die Performance signifikant höher ist als bei deinem derzeitigen Programm, kannst du den Performacefresser genauer eingrenzen.



  • danke für die antwort.

    die performance wurde von der festplatte geschluckt. wenn ich nämlich drei dateien kopiere (eventuell sind diese noch ordentlich fragmentiert) brauch die festplatte viel zu lange zum sektoren suchen und daten auslesen um der applikation permanent mehr als 2-3000 KB/sec an daten zu liefern. wenn ich nur einen thread verwende, geht alles flüssig mit bis zu 8000 KB/sec.


Anmelden zum Antworten