Un truc étrange... Différence entre Windows et Linux - C - Programmation
Marsh Posté le 11-10-2007 à 13:29:04
Le code est exactement le meme sur les deux plateforme ? Tu utilises quel API pour ecrire dans un fichier ? Tu fais de la manipulation de texte avant, si oui quel genre de manipulation ?
Marsh Posté le 11-10-2007 à 13:32:50
Le code est en effet exactement le même sur les deux plateformes.
Pour info voici le code :
Code :
|
Edit : Euuuh. En fait non. Je viens de le tester sous Linux au bureau, et c'est long aussi. Pourtant sur mon PC ça carburait
Edit 2 : Je viens de retester. Sur mon portable, Dual Core avec Mandriva Spring 2007.1 sous VMWare, le code met 10 secondes pour écrire les 96 fichiers.
Sur le PC du bureau, il faut quelques minutes.
Marsh Posté le 11-10-2007 à 14:16:32
C'est pas un peu bourrin d'ouvrir et de fermer le fichier de sortie à chaque écriture ?
Tu pourrais peut-être l'ouvrir, écrire toutes tes lignes, et fermer à la fin (juste avant d'ouvrir le fichier suivant). Ca devrait être plus efficace je pense. (mais je dis peut-être des conneries parce que j'ai parcouru le code vraiment brièvement)
Marsh Posté le 11-10-2007 à 15:39:49
bof, le problème c'est que avoir tous ces descripteurs de fichiers ouverts, tu peux vite atteindre une limite système si ton programme évolue (genre 1024 par exemple).
Marsh Posté le 11-10-2007 à 15:50:06
Taz a écrit : bof, le problème c'est que avoir tous ces descripteurs de fichiers ouverts, tu peux vite atteindre une limite système si ton programme évolue (genre 1024 par exemple). |
Ouais, mais là si j'ai bien lu, il n'a besoin que d'un seul fd ouvert à la fois puisqu'il écrit dans les fichiers les uns à la suite des autres.
Marsh Posté le 11-10-2007 à 15:51:30
bah oui ... je soulignais le problème potentiel de ton idée
Marsh Posté le 11-10-2007 à 16:07:34
Tu utilises quoi comme compilateur sur Windows ?
Les resultats attendus sont-ils correct dans les deux cas ?
Marsh Posté le 11-10-2007 à 16:25:52
là c'est a priori limité par le E/S, le compilateur n'y peut pas grand chose.
Marsh Posté le 11-10-2007 à 17:07:15
Lorsque je parlais de compilateur, je pensais plus aux librairies fournies avec le compilateur.
Marsh Posté le 11-10-2007 à 17:35:08
J'dit ça comme ça, mais t'es obligé de faire du C ou pas ?
Non parce que avec du C++ en utilisant le fichier comme un Stream ça devrait allé pas mal plus vite.
Marsh Posté le 11-10-2007 à 17:56:22
Olivier51 a écrit : Lorsque je parlais de compilateur, je pensais plus aux librairies fournies avec le compilateur. |
Wof, ça devrait pas différer des masses. La vraie différence, je pense qu'elle peut venir de NTFS qui aura tendance à fragmenter comme un goret, voire créera un fragment par écriture.
Marsh Posté le 11-10-2007 à 18:00:32
192000 ouverture/ecriture/fermeture de fichier + 96 mkdir, c'est sur que c'est lent.
Marsh Posté le 11-10-2007 à 18:41:00
franceso a écrit : ...mais je dis peut-être des conneries parce que j'ai parcouru le code vraiment brièvement... |
Non non, t'as bien lu. fopen+fclose dans le while => pas tiptop
franceso a écrit : Ca devrait être plus efficace je pense. |
Ouaip. Avec le système de bufferisation ça ira nettement mieux. Sûrement pas aussi rapide que Linux (où le C est une seconde langue pour lui) mais entre "un fopen/fclose par boucle" et "un seul fopen/fclose par fichier" la différence sera quand-même bien visible...
Marsh Posté le 11-10-2007 à 19:02:12
Il faudrait voir pour utiliser un outils d'analyse pour tracer le temps dans chaque fonctions, ca irait plus vite (je n'ai pas de nom en tete pour Windows).
Marsh Posté le 11-10-2007 à 21:11:16
Hehe ah oui ça l'antivirus sur 192000 I/O ca fait mal... surtout si c'est un truc style AVG
Marsh Posté le 11-10-2007 à 13:24:03
Bonjour,
J'ai codé un ptit programme qui écrit dans des fichiers.
Le programme crée 96 fichiers dans chacun desquels il écrit 2000 lignes.
Lorsque le code tourne sous Linux, il tourne pendant 10 ou 15 secondes à tout casser. Lorsqu'il tourne sous Windows, il lui faut 10 ou 15 secondes pour écrire UN SEUL fichier. Ce qui rend le traitement un peu long sous Windows.
J'ai un processeur Dual Core, donc déjà il ne sait pas le gérer. Il ne tourne que sur un seul processeur, mais tout de même, la différence avec Linux est nettement marquée.
C'est normal que Windows soit aussi long ?