2009-05-21 7 views
1

J'ai un fichier d'environ 7 Mo qui enregistre sur mon partage local en quelques secondes. Toutefois, l'enregistrement de ce fichier sur un emplacement réseau prend minutes. Je me demande ce que je peux faire pour accélérer cela. Voici mes options actuelles:Enregistrement d'un fichier sur le réseau

  1. Enregistrer les données dans un fichier temporaire sur la machine locale, puis copiez le fichier temporaire sur le chemin réseau. Je vais probablement le faire car c'est le plus facile et le plus rentable pour l'argent.
  2. Utiliser SetFilePointerEx() et SetEndOfFile(). J'ai pensé que cela pourrait être utile basé sur la réponse à cette question: Creating big file on Windows
  3. Le tampon écrit. Je pourrais mettre en cache les données d'écriture moi-même et vider quand le tampon est plein, mais cela ne serait-il pas redondant avec la mise en cache qui est déjà faite par le système d'exploitation?

# 1 semble être la meilleure option, mais je me demande si quelqu'un a des conseils sur une meilleure façon d'accélérer l'enregistrement sur les chemins réseau?

Modifier: Le réseau est sur un réseau local gigabit, la vitesse ne devrait donc pas poser de problème. La copie du fichier sur le chemin réseau prend environ 1 seconde. Je viens juste de noter que nous appelons WriteFile() sur des blocs de données plus petits que nous devrions probablement, ainsi optimiser le code de plus haut niveau pour écrire des morceaux plus gros aidera probablement, mais la différence de vitesse est toujours si importante .

+0

Si la copie du fichier prend une seconde, alors peut-être vous devriez utiliser les fonctions CopyFile ou CopyFileEx, ou, invoquer la commande de copie. – ChrisW

Répondre

0

Courez-vous sur un réseau lent?

Id aller avec l'option numéro 1 et enregistrez le fichier sur le partage réseau en arrière-plan

1

Je me demande si quelqu'un a des conseils sur une meilleure façon d'accélérer l'enregistrement des chemins de réseau?

Peut-être avez-vous besoin d'un meilleur réseau. Les FAI fournissent souvent des téléchargements rapides mais des téléchargements lents. Combien de temps faut-il pour transférer 7 Mo en utilisant un protocole tel que FTP?

1

Vous devez effectuer des opérations de lecture-modification-écriture. Vous voudrez généralement écrire des blocs d'au moins 4 Ko, possiblement des puissances supérieures à 2. La raison est que pour ajouter un octet, vous devez généralement lire le dernier bloc d'un fichier, ajouter un octet et réécrire le nouveau bloc . En écrivant des blocs de 4 Ko (seulement), chaque écriture se termine généralement par un nouveau bloc à la fin du fichier. La mise en cache devrait vous aider, mais la mise en cache n'est pas parfaite. Cela peut aider à ouvrir le fichier exclusivement. Si vous refusez l'accès en lecture, le système d'exploitation peut remarquer que le vidage du cache n'est pas trop important pour les autres applications. CopyFile peut être rapide car il peut faire exactement la même chose.

+0

De bons points, bien que j'ouvrais déjà un fichier pour écrire avec l'accès exclusif (appelant CreateFile() avec dwShareMode == 0). –

Questions connexes