3 votes

Amélioration des performances d'Excel

J'ai une machine Windows de 8 CPU 3 GHz qui est estimée pour terminer un calcul utilisant Excel en 16 jours basé sur un test de données échantillon. Cette performance n'est pas acceptable(!).

Le calcul n'utilise pas les capacités d'Excel mais est essentiellement un script VBA appelant un objet COM qui a une fonction Calculator.

Le processus Calculator utilise 25% de CPU et Excel utilise 1%. La mémoire d'échange ne semble pas être utilisée. Étant donné que le processus lit et écrit dans des fichiers texte, je suppose que c'est lié à l'E/S. Les comptes de lectures/écritures E/S sont constamment comptabilisés pendant le calcul.

Un vérificateur de virus est installé, mais il ne vérifie pas activement. Par exemple, le CPU est à 0% pendant la période de calcul.

La meilleure suggestion jusqu'à présent est d'utiliser un RAM Disk.

Pouvez-vous suggérer d'autres pistes d'investigation concernant le goulot d'étranglement de performance?

[Plus tard...]

Merci beaucoup pour les conseils ci-dessous. Fondamentalement, le processus Calculator est un calculateur financier spécialisé mais comme mentionné ci-dessous, il semble que le goulot d'étranglement se situe dans son utilisation via COM. Cette méthode supprime toute la fonctionnalité multithread offerte par le calculateur, qui peut également être résolu en tant que service Web.

Le scénario réel impliqué est une mise à jour de table financière tous les trois ans en utilisant ce nouveau Calculator. Malheureusement, pas assez de temps n'a été réservé suffisamment tôt dans le calendrier pour estimer les performances, ce qui a conduit à l'urgence d'enquêter sur le problème de performance. Étant donné que ce calcul n'est pas effectué régulièrement, il n'est pas nécessaire de configurer un environnement optimisé pour la vitesse.

La solution correcte est d'abandonner Excel et d'écrire un répartiteur multithreaded vers le calculateur, mais nous cherchons actuellement un contournement pour obtenir les calculs dans un délai raisonnable.

9voto

Matías Points 3008

En d'autres termes, ne pas utiliser Excel pour ce genre de chose. Vous pouvez peut-être regarder Excel Services (extension pour SharePoint) qui est conçu pour décharger le traitement, cependant je n'ai aucune expérience avec cela.

Si vous réalisez quelque chose d'aussi compliqué, vous devriez vraiment envisager des outils mathématiques sérieux pouvant s'adapter à des environnements multi-CPU - Cependant, je ne saurais même pas par où commencer sans savoir ce que vous essayez de réaliser.

Des choses à considérer incluent SageMath, MATLAB et Mathematica, entre BEAUCOUP d'autres.

4voto

phoebus Points 3881

Une chose à faire serait probablement de trouver un meilleur moyen de mettre en œuvre votre logiciel, en utilisant des outils mieux adaptés au calcul de performance, ou même un langage/cadre spécifique à votre domaine de problème. De nombreux outils sont disponibles, tels que Mathematica, SAS, R, et ainsi de suite. De plus, vous devriez le paralléliser autant que possible.

Évitez également d'utiliser le disque autant que possible. Si vous devez utiliser le disque, au-delà des disques RAM, vous devriez envisager d'utiliser un array RAID de haute performance comme un RAID 10, ou encore mieux un RAID 10 composé de SSD.

Vous devriez profiler votre processus pendant qu'il s'exécute et voir combien de temps est consacré au système et combien de temps est consacré à l'utilisateur. Je suis prêt à parier que beaucoup du temps d'exécution est consacré aux appels système pour effectuer toutes ces E/S disque. Eliminez-les.

4voto

Charles Points 1047

Vous utilisez 25% du CPU car l'objet COM est monothread et n'utilise pas les autres cœurs de votre CPU. Vous ne pouvez pas améliorer les performances de votre calcul sans modifier le code de l'objet COM.

Désolé.

0voto

harrymc Points 394411

Vous avez juste besoin du Gestionnaire des tâches :

Allez dans l'onglet Processus, puis menu Affichage / Sélectionner les colonnes, et cochez une ou toutes les options suivantes :

  • Utilisation du processeur (donne le pourcentage total de CPU utilisé)
  • Mémoire - Ensemble de travail (mémoire en cours d'utilisation)
  • Lectures E/S + Ecritures E/S (compte le nombre total d'accès au disque effectués)

Vous pouvez ensuite cliquer deux fois (pas de double-clic) sur une colonne pour la trier par ordre décroissant de valeurs, afin de vérifier une utilisation excessive.

Cependant, si le problème réside dans l'objet ActiveX, l'optimisation d'Excel ne serait d'aucune aide.

0voto

mtone Points 11550

Comme d'autres l'ont mentionné, vous devriez envisager de déplacer votre traitement loin d'Excel. VBA et les objets COM ne sont pas efficaces pour effectuer de nombreuses opérations de va-et-vient.

Personnellement, j'aurais tendance à envoyer mes données à un serveur SQL et à écrire une requête là-bas. Votre requête/procedure peut effectuer ses calculs et fournir la sortie à Excel en utilisant une connexion externe.

Les solutions SGBDR sont assez efficaces pour faire des choses que je n'oserais jamais essayer de faire dans Excel ou VBA, travaillant facilement avec des bases de données multi-Go et autant de threads que vous pouvez obtenir.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X