Wir haben ein Dienstprogramm, mit dem Sie Dateien an einen gemeinsam genutzten Netzwerkspeicherort hochladen (und andere Vorgänge für die Datei ausführen) können.
Die Dateigröße variiert in der Regel zwischen einigen MB und 500 MB.
Es wurde der Vorschlag gemacht, dass wir beim Hochladen der Dateien an den freigegebenen Speicherort möglicherweise Multithreading unterstützen sollten - dies ist nicht in Byte-Blöcken erforderlich -. Jeder Thread sollte eine Datei auswählen und versuchen, sie hochzuladen.
Ich bin mir nicht sicher, ob Multithreading solche E / A-Vorgänge beschleunigen kann. Ist meine Vermutung gültig?
Wenn wir diese Funktionalität tatsächlich erstellen müssen, habe ich mich gefragt, was ein guter Entwurfsansatz für die Copy File Engine wäre.
Wäre es sinnvoll, ein Tool wie Robocopy zu verwenden (ich habe gelesen, dass die neueren Versionen Multithreading unterstützen)?
Bearbeiten: Entschuldigung für die Verzögerung und das Fehlen einiger wichtiger Informationen.
Dieses Dienstprogramm wird mit C # (.Net 2.0) erstellt, und jedes zukünftige Update muss auch .Net verwenden (Framework-Version ist keine Einschränkung). Das Dienstprogramm ist auf den Computern der Benutzer installiert (ca. 20 alle unter WinXP). Die Zielfreigabe befindet sich auf dem Win2k3-Server.
Bearbeiten 2: haben beschlossen, einige Tests mit einer einfachen Anwendung durchzuführen, die den Datei-Upload über TPL implementiert. Nach dieser Analyse werden wir entscheiden, ob wir fortfahren oder nicht. Vielen Dank an alle für die erweiterte Hilfe.
SHFileOperation(FO_COPY)
. Damit erhalten Sie alle Optimierungen, die die Mitarbeiter von Microsoft für angemessen hielten.
select
Schleife anstelle von Threads zu verwenden. Dazu müssen Sie zwar "Ihren Code auf den Kopf stellen" (der Code zum Kopieren einer Datei ist keine einfache Folge von Befehlen mehr), Sie müssen sich jedoch nicht mehr um die Thread-Synchronisierung kümmern.