Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2106 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Lenteur de la fonction CopyFile() !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lenteur de la fonction CopyFile() !!!

n°424663
ndmax
Posté le 12-06-2003 à 09:11:44  profilanswer
 

Slt !
 
J'ai fait une petite appli et j'essaie maintenant de l'optimiser..
Je me suis rendu compte que parfois, la fonction CopyFile() peut être très rapide sur un fichier de plusieurs Méga, et d'autres fois pour le même fichier, au même moment du programme, il va mettre au moins 5 s de plus !!!
Comme je l'utilise plusieurs fois dans mon appli, c'est assez ennuyant car parfois je peux avoir un écart de 15 à 20 s pour le même résultat !!!
J'essaie de faire le plus rapide et fiable possible.
 
Pouvez-vous me conseiller ?
Merci.

mood
Publicité
Posté le 12-06-2003 à 09:11:44  profilanswer
 

n°424717
antp
Super Administrateur
Champion des excuses bidons
Posté le 12-06-2003 à 10:07:03  profilanswer
 

C'est une fonction de l'API Windows [:spamafote]
 
Je crois qu'une bonne méthode est d'utiliser les TFileStream:
mettre le second stream à la taille du premier (Dest.Size := Source.Size), puis faire un Dest.CopyFrom(Source) ou un truc du genre.
 
Sinon t'as SHFileOperation qui est ce qu'utilise l'explorateur Windows, donc tu peux même avoir la fenêtre qui affiche la progression.


Message édité par antp le 12-06-2003 à 10:07:45

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°424746
ndmax
Posté le 12-06-2003 à 10:44:05  profilanswer
 

Bon, après pas mal d'essais pour évaluer les résultats, voici ce que j'ai obtenu (pour 6 Mo):
 
* CopyFile
--> 50% des essais en 1s
--> 50% des essais en 20s !!!
 
* TFileStream
--> 100% des essais en 10s
 
Comme quoi il y a pas mal de différences..
Sinon, pour l'instant j'effectue mes tests sur un serveur Windows
mais mon appli sera ensuite utilisée notamment pour copier des fichiers d'un serveur UNIX vers un serveur Windows.
Donc y a-t-il une méthode à privilégier pour la copie à partir d'un serveur UNIX vers un serveur Windows ??
 
Merci.

n°424757
Taz
bisounours-codeur
Posté le 12-06-2003 à 10:54:27  profilanswer
 

comment tu procèdes pour tes essais? par ce que si tu as un disque lent, tu lance un fois ok, quand tu relances juste derriere, l'OS est encore entrain de fflusher, donc les novuelles opérations sont ralenties

n°424802
ndmax
Posté le 12-06-2003 à 11:37:09  profilanswer
 

Ben en fait j'ai testé env. 7 fois avec TfileStream,
où j'ai tjs obtenu le même résultat.
 
Ensuite j'ai testé avec le CopyFile où j'ai obtenu
1 une 1s, une fois 20s, une fois 1s, une fois 20s
et ainsi de suite.
 
Puis j'ai retesté TFileStream (tjs pareil)
et CopyFile (tjs pareil aussi).

n°424807
Taz
bisounours-codeur
Posté le 12-06-2003 à 11:40:07  profilanswer
 

fais les tests avec quelques secondes de pause entre les exécutions

n°425104
ndmax
Posté le 12-06-2003 à 14:45:49  profilanswer
 

Bon, j'ai refait des essais avec cette fois-ci
un fichier de 10 Mo !!!
 
 
CopyFile
--> 35s  (4x)
 
TFileStream
--> 18s  (3x)
 
 
Et ATTENTION !!!!
 
Block
--> 4s  (1x)
--> 3s  (1x)
--> 2s  (5x)
 
 
Oui, c'est ultra rapide avec cette méthode par blocks !!
J'avais découvert cette méthode en me formant à Delphi
et j'avais déjà trouvé que c'était une méthode RAPIDE !!!
 
 
Alors ?

n°425123
antp
Super Administrateur
Champion des excuses bidons
Posté le 12-06-2003 à 14:56:49  profilanswer
 

c'est quoi block ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°425140
taureau
Posté le 12-06-2003 à 15:08:27  profilanswer
 

il parle surement de BlockRead et BlockWrite

n°425155
ndmax
Posté le 12-06-2003 à 15:17:18  profilanswer
 

Oui, tout à fait, c'est bien cela !!!
 
Désolé de ne pas avoir expliqué.
C'est extrêmement rapide !

mood
Publicité
Posté le 12-06-2003 à 15:17:18  profilanswer
 

n°425182
antp
Super Administrateur
Champion des excuses bidons
Posté le 12-06-2003 à 15:26:44  profilanswer
 

c'est bon à savoir, faudra que je fasse des tests


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°425218
ndmax
Posté le 12-06-2003 à 15:50:15  profilanswer
 

Pour une fois que je t'apprends qqchose antp !!   :D  
Mais bon, je ne m'avance pas trop !!   :ange:  
 :sol:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Lenteur de la fonction CopyFile() !!!

 

Sujets relatifs
runtime.exec() d'une fonction dans un autre répertoire ... [Résolu][vbscript]-besoin d'aide sur une fonction
[E-Commerce] pb de passage de paramètre à une fonctionMeilleure méthode pour utiliser un vecteur dans une fonction
appel de fonction/de l'aide pour un touristeFonction qui retourne un char*
Fonction équivalent à fgetcsv() de PHP ?question de newbie sur les pointeur de fonction
problème de variables dans fonction PHP[PHP] fonction strstr . Quelqu'un peut m'éclairer ?
Plus de sujets relatifs à : Lenteur de la fonction CopyFile() !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR