Question

Y at-il une bonne ressource pour obtenir les temps d'exécution pour les fonctions API standard? Il est un peu confus en essayant d'optimiser votre programme. Je sais que Java est pas fait pour être particulièrement rapide, mais je ne peux pas sembler trouver beaucoup d'informations sur ce tout.

Exemple Problème: Si je suis à la recherche d'un certain jeton dans un fichier est-il plus rapide pour scanner chaque ligne en utilisant string.contains (...) ou d'apporter par exemple 100 ou si les lignes de les mettre à une chaîne locale les exécuter contient ce morceau.

Était-ce utile?

La solution

AFAIK, il n'y a pas de référence standard pour les méthodes de l'API, et en fait, il pourrait y avoir différentes implémentations basées sur la machine virtuelle Java que vous utilisez. Ajoutez à cela les optimisations JIT JVM, le ramassage des ordures, et beaucoup d'autres choses, et je doute que vous pourriez obtenir des chiffres globalement significatifs. La plupart vous pouvez faire est d'écrire vos propres repères.

Certaines méthodes spécifient la complexité de calcul des opérations dans leurs JavaDocs. D'autres méthodes décrivent d'autres problèmes de performance. Assurez-vous que vous êtes au courant et en tenir compte.

Mais au-delà, la plupart des chances sont que vous faites des optimisations prématurées. Utilisez un profileur pour le voir est en fait un goulot d'étranglement.

Par exemple, dans votre cas, il y aura le coût de la lecture d'un fichier, le coût de placer des chaînes dans le grand tampon, etc. Je ne suis pas sûr que vous pouvez vraiment optimiser la lecture au niveau de la chaîne. Si cela était vraiment mission critique que vous pouvez lire le caractère par caractère et mettre en œuvre un algorithme d'appariement intelligent sans jamais créer des chaînes, cela pourrait être un peu plus rapide.

Autres conseils

Vous cherchez un profileur

Il n'y a pas de documentation, car elle varie considérablement d'une machine à l'OS à OS. Pour obtenir les horaires précis de votre programme, utilisez un profileur . Le profileur NetBeans est bon.

Quant à savoir qui est le plus rapide, il n'y a pas de meilleure alternative alors le code à la fois. Alternativement, vous pouvez coder l'alternative la plus simple, et quand il travaille, vous découvrirez peut-être que c'est assez rapide pour vos besoins, et pas la peine de codage de la mise en œuvre plus complexe.

Si je comprends bien votre question, votre demande s'il est préférable de lire une ligne de quelque part, ou de lire une ligne de la mémoire. Il sera toujours plus rapide d'avoir le texte chargé en mémoire pour faire vos scans puis de les lire à partir d'un flux d'E / S, en particulier à partir du disque. La vitesse de lecture n'a rien à voir avec Java, mais à quelle vitesse la source peut obtenir ces données à votre programme.

Je suis d'accord avec les idées sur l'utilisation d'un Profiler - mais vous pourriez aussi envisager simplement en utilisant log4j (ou Apache Commons Logging etc) pour obtenir des statistiques économiques sur les performances du programme - en ce que les entrées du journal dans les fichiers journaux résultants auront horodatées à la milliseconde près: Depuis l'exploitation forestière est généralement une chose utile à faire lors du débogage de toute façon, il est probablement utile de faire ce premier

.

outils de profilage d'apprentissage et d'apprendre à interpréter les données résultantes est généralement une tâche non négligeable en soi - vaut la peine, mais vous pourriez être en mesure d'obtenir une idée plus rapidement tout en utilisant des données de journalisation - surtout si vous formatez CSV etc afin que vous importez dans une feuille de calcul.

si nous négligeons disque IO temps, et il suffit de considérer le temps CPU passé dans votre code, le 2ème choix sera beaucoup plus lent que le premier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top