copie de DVD plutot lente [WIN32] - C - Programmation
Marsh Posté le 19-03-2004 à 13:46:04
Je ne sais pas si ton code est complet mais il y a apparemment des problèmes dans le nom de tes variables :
buf2 = new ...
fread(buf,...
delete []buf;
buf n'est pas une variable qui existerait également ?
bufferSize a été initialisé avec la valeur de BUFFER_SIZE ?
Marsh Posté le 19-03-2004 à 13:48:43
Sinon niveau perfs je ne sais pas trop. L'inconvénient ici est que pendant que tu écris sur le disque, tu ne lis plus rien sur le dvd. Idem quand tu lis sur le dvd tu attends pour écrire sur le disque dur.
Marsh Posté le 19-03-2004 à 13:51:22
Pourquoi ne pas utiliser directement la fonction win32 qui permet la copie d'un fichier ?
The CopyFile function copies an existing file to a new file.
BOOL CopyFile(
LPCTSTR lpExistingFileName,
// pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
Marsh Posté le 19-03-2004 à 13:54:19
Vinx a écrit : Sinon niveau perfs je ne sais pas trop. L'inconvénient ici est que pendant que tu écris sur le disque, tu ne lis plus rien sur le dvd. Idem quand tu lis sur le dvd tu attends pour écrire sur le disque dur. |
heu a part avec des threads jvois pas trop comment y pourrait faire puis faudra encore synchroniser tout ca
faudrait voir du cote de lapi si ya pas qqch de tout fait
sinon essaie des differentes taille pour le buffer ya certainement moyen de faire mieux
EDIT : grilled by vinx
Marsh Posté le 19-03-2004 à 14:18:21
Vinx a écrit : Pourquoi ne pas utiliser directement la fonction win32 qui permet la copie d'un fichier ? |
arf chui grave, faut toujours que je reinvente la roue.
Pour la variable, c est une erreur de recopie c etait bien buf et non buf2.
Bon je vais essayer ca
Marsh Posté le 19-03-2004 à 16:19:28
bon ca met 2626 sec avec la fonction CopyFile. Il faut quand meme 45 mn pour copier un DVD completement. Ca fait du 3MO /sec je trouve ca pas tres rapide pour un DVD censé aller en 16X (2,5MO le 1X il me semble).
Marsh Posté le 19-03-2004 à 16:22:50
Vinx a écrit : Sinon niveau perfs je ne sais pas trop. L'inconvénient ici est que pendant que tu écris sur le disque, tu ne lis plus rien sur le dvd. Idem quand tu lis sur le dvd tu attends pour écrire sur le disque dur. |
c'est pour ça que y a un truc en dessous qui s'appelle OS qui est sensé faire le boulot. apparemment ça n'est pas le cas
Marsh Posté le 19-03-2004 à 16:30:59
Vinx a écrit : Sinon niveau perfs je ne sais pas trop. L'inconvénient ici est que pendant que tu écris sur le disque, tu ne lis plus rien sur le dvd. Idem quand tu lis sur le dvd tu attends pour écrire sur le disque dur. |
pas bete, j avais zappé ce message...
Marsh Posté le 19-03-2004 à 17:16:24
Citation : heu a part avec des threads jvois pas trop comment y pourrait faire puis faudra encore synchroniser tout ca |
En travaillant en asynchrone (Overlapped IO, CompletionRoutine).
Marsh Posté le 23-03-2004 à 10:39:55
Ok. Bon j'ai un autre probleme (en fait 2). Lorsque j'insere le DVD (avec detection par windows XP) puis mon programme de copie ca marche sans probleme.
Par contre si le DVD est deja dedans et que je reboote puis lance le programme de copie, il ne voit aucun fichier. Je suis obligé d ejecter puis de remettre le DVD. Apparemment, il y a quelque chose a faire mais je ne sais pas quoi
Par ailleurs, existe-t-il une notification comme quoi un CD/DVD a été inséré ?
Marsh Posté le 24-03-2004 à 14:03:48
Avec ton code de copie qui est dans le premier post, la taille du fichier n'est pas préallouée ce qui peut donner un fichier fragmenté. Ça réduit aussi les performances.
Marsh Posté le 24-03-2004 à 14:11:56
antp a écrit : Avec ton code de copie qui est dans le premier post, la taille du fichier n'est pas préallouée ce qui peut donner un fichier fragmenté. Ça réduit aussi les performances. |
Marsh Posté le 24-03-2004 à 14:14:09
Si Linux bouge les bouts de fichiers chaque fois que ça s'agrandit ça doit pas être top pour les performances non plus
Marsh Posté le 24-03-2004 à 15:43:28
Citation : bon ca met 2626 sec avec la fonction CopyFile. Il faut quand meme 45 mn pour copier un DVD completement. Ca fait du 3MO /sec je trouve ca pas tres rapide pour un DVD censé aller en 16X (2,5MO le 1X il me semble). |
Depuis l'explorer ça met combien de temps ?
Apparement 1X c'est plutot 1.38 Mo/sec. Ca ferait un peu plus de 2X de moyenne.
Marsh Posté le 24-03-2004 à 16:32:08
antp a écrit : |
on a pas du lire les mêmes documentations alors ...
et tu ferais comment pour préallouer un gros fichier ?
Marsh Posté le 24-03-2004 à 16:37:07
Taz a écrit : on a pas du lire les mêmes documentations alors ... |
J'ai lu aucune doc, je suppose qu'il fait ça. Parce que s'il ne bouge pas un bloc quand l'espace est plein je vois pas comment il évite la fragmentation
Taz a écrit : |
En Win32 t'as un truc genre SetEndOfFile.
Il doit y avoir d'autres moyens.
Marsh Posté le 24-03-2004 à 16:41:50
Apparemment la fonction copyfile alloue la taille max des le debut (mon fichier fait 800 MO des le debut de la copie). Mais c est quand meme bizarre que la copie soit si lente meme avec la fonction CopyFile.
Marsh Posté le 24-03-2004 à 16:43:52
Citation : |
Il ne boge rien. J'avais aussi cherché à comprendre pkoi le fs de Linux n'a pas besoin d'être défragmenté :
- 1 : parce que la fragmentation n'est pas trop problématique en multiuser (si si on m'a dit ça)
- 2 : la vrai raison, c'est que le cache manager se démerde pour l'éviter. Ca voudrait dire qu'il écrit le moins possible sur disque, ça + le fait que Linux tourne h24 car il reboot jamais, hop y'a pas de fragmentation.
Je suis pas convaincu que dans une utilisation monoutilisateur classique ou le PC est rebooté tous les jours qu'il n'y ai pas de fragmentation.
Marsh Posté le 24-03-2004 à 16:44:35
Citation : Apparemment la fonction copyfile alloue la taille max des le debut (mon fichier fait 800 MO des le debut de la copie). Mais c est quand meme bizarre que la copie soit si lente meme avec la fonction CopyFile. |
Et depuis l'explorer combien de temps ?
Marsh Posté le 24-03-2004 à 16:46:35
ben comme déjà dit, fais des écritures non-bloquantes, du moins qui ne bloquent pas ton fil d'exécution qui lit les données
cela dit : je trouve ça bizarre que Windows^W^W^W normal que Windows n'est pas un mécanisme de cache évolué qui te permettent de ne pas te soucier de tout ça
Marsh Posté le 19-03-2004 à 12:21:16
salut,
j'ai une application qui doit entre autre copier l integralité du contenu d'un DVD sur disque dur. J'ai donc ecrit un premier algorithme intuitif mais bizarrement c est tres lent.
En gros pour un DVD de 8GO, j'ai mis 6200 sec soit une moyenne de 1,2 MO / sec (environ), ce qui n est pas du tout la vitesse du lecteur DVD. En copiant par l explorateur, c est beaucoup plus rapide.
il y a donc une subtilité que je n'ai pas compris ou une affreuse erreur dans mon algo.
voici le code
Peut etre faut-il donner une priorité plus grande au thread de copie ?
merci