Transacted operations progress buggy?



  • Sagt mal, ist es normal, dass der progress (CopyProgressRoutine) mehrerer transacted operations hintereinander (zB 10x CopyFileTransacted) völlig unsinnig ist?
    Meistens sieht es nämlich so aus, dass 9 der 10 Aufrufe sehr schnell fertig sind, auch wenn die Dateigrößen mehrere hundert MB sind, der letzte Aufruf dann aber plötzlich extrem lange braucht (also bis alles fertig ist) auch wenn die letzte Datei zB. nur 1 kB hat?!

    Liegt es evtl. an meinen SSDs? Ist das API nicht für so hohe Transferraten ausgelegt?

    Ohne transacted operations sieht es aber normal aus (zb CopyFileEx). Ein Aufruf kehrt dann wirklich erst zurück, wenn die aktuelle Datei 100% transferiert wurde.



  • Ich *glaube* Windows tut irgendwas flushen bevor CopyFileEx zurückkehrt. (Und mit irgendwas meine ich: alles was für den Kopiervorgang relevant ist, also Daten + Verzeichniseinträge etc.)

    Wenn eine Transaktion offen ist, könnte das Flushen bis zum "Commit" verzögert werden, was das beobachtete Verhalten erklären würde.

    Was du auf jedem Fall auch mit CopyFileEx oder sogar ganz billig mit dem Explorer beobachten kannst: kopier mal ein einziges grosses File. Idealerweise ein File das im Cache steht (kannst es z.B. einfach 2x hintereinander kopieren), idealerweise von einem schnellen Datenträger (inderne HDD/SSD) auf einen langsamen (lokalen) Datenträger (USB Harddisk/Stick).
    Wenn ich das mache, bekomme ich zu Beginn des Transfers oft total irre Datenraten angezeigt, z.B. eben > 100 MB/s auf ne USB 2.0 Platte (=unmöglich). Und bei den letzten paar Prozent "steht" der Progress Bar dann so lange bis der Cache auch wirklich auf den Datenträger geflusht wurde.
    Beim Kopieren mehrerer Dateien "steht" der Progress Bar vor jedem File-Wechsel, was sich mit deinen Beobachtungen für "Ohne Transaktion" deckt.

    ps: wobei ich mir gerade überlege... heisst das nicht, dass man das Kopieren von vielen kleinen Dateien damit hübsch beschleunigen könnte, speziell bei Platten/SSDs die erst mit höherer Queue-Depth so richtig loslegen? Wäre mal nen Versuch wert...


Anmelden zum Antworten