Je sais que ce n'est pas tant une question de programmation, mais c'est pertinent.
Je travaille sur un projet multiplateforme assez important . Sous Windows, j'utilise VC ++ 2008. Sous Linux, j'utilise gcc. Il y a environ 40k fichiers dans le projet. Windows est 10x à 40x plus lent que Linux lors de la compilation et de la liaison du même projet. Comment puis-je résoudre ce problème?
Une seule modification incrémentielle de 20 secondes sous Linux et> 3 minutes sous Windows. Pourquoi? Je peux même installer l'éditeur de liens «or» sous Linux et réduire ce temps à 7 secondes.
De même, git est 10x à 40x plus rapide sous Linux que Windows.
Dans le cas de git, il est possible que git n'utilise pas Windows de manière optimale mais VC ++? On pourrait penser que Microsoft voudrait rendre ses propres développeurs aussi productifs que possible et une compilation plus rapide y contribuerait grandement. Peut-être essaient-ils d'encourager les développeurs à utiliser C #?
Comme simple test, trouvez un dossier avec beaucoup de sous-dossiers et faites un simple
dir /s > c:\list.txt
sur Windows. Faites-le deux fois et chronométrez la deuxième exécution pour qu'elle s'exécute à partir du cache. Copiez les fichiers sur Linux et effectuez les 2 exécutions équivalentes et chronométrez la deuxième exécution.
ls -R > /tmp/list.txt
J'ai 2 postes de travail avec exactement les mêmes spécifications. HP Z600s avec 12gig de RAM, 8 cœurs à 3.0ghz. Sur un dossier contenant environ 400 000 fichiers, Windows prend 40 secondes, Linux prend <1 seconde.
Existe-t-il un paramètre de registre que je peux définir pour accélérer Windows? Ce qui donne?
Quelques liens légèrement pertinents, pertinents pour les temps de compilation, pas nécessairement d'entrées / sorties.
Apparemment, il y a un problème dans Windows 10 (pas dans Windows 7) selon lequel la fermeture d'un processus détient un verrou global . Lors de la compilation avec plusieurs cœurs et donc plusieurs processus, ce problème survient.
L'
/analyse
option peut nuire à la performance car elle charge un navigateur Web . (Pas pertinent ici mais bon à savoir)