Lenteur de la fonction CopyFile() !!! - Delphi/Pascal - Programmation
Marsh Posté le 12-06-2003 à 10:07:03
C'est une fonction de l'API Windows
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.
Marsh Posté le 12-06-2003 à 10:44:05
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.
Marsh Posté le 12-06-2003 à 10:54:27
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
Marsh Posté le 12-06-2003 à 11:37:09
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).
Marsh Posté le 12-06-2003 à 11:40:07
fais les tests avec quelques secondes de pause entre les exécutions
Marsh Posté le 12-06-2003 à 14:45:49
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 ?
Marsh Posté le 12-06-2003 à 14:56:49
c'est quoi block ?
Marsh Posté le 12-06-2003 à 15:17:18
Oui, tout à fait, c'est bien cela !!!
Désolé de ne pas avoir expliqué.
C'est extrêmement rapide !
Marsh Posté le 12-06-2003 à 15:26:44
c'est bon à savoir, faudra que je fasse des tests
Marsh Posté le 12-06-2003 à 15:50:15
Pour une fois que je t'apprends qqchose antp !!
Mais bon, je ne m'avance pas trop !!
Marsh Posté le 12-06-2003 à 09:11:44
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.