rlbond - vous l'avez probablement déjà remarqué, mais pour quelqu'un d'autre dans le futur...
Je viens d'utiliser l' StackWalker
bibliothèque et après quelques tests, j'ai réalisé que si vous l'utilisez pour autre chose que de l'affichage des informations sur une demande d'arrêt d'exception, il vaut la peine de créer une instance unique de
l' StackWalker
objet. Pour une application multithread, vous pouvez créer une instance par thread à l'aide de TLS pour éviter les problèmes de synchronisation (n'ai pas essayé encore bien - être averti).
La raison pour cela est que 99%+ du temps pour générer une trace est consacré au chargement de tous les symboles. Ce pourcentage peut varier - les 99% est pour ma configuration, où j'ai sous-classe et de remplacer OnOutput()
de tout enregistrer dans une mémoire tampon plutôt que d'afficher et puis il y mais le point est le même - ne les utilisez pas comme un objet, si vous allez utiliser beaucoup.
Mes timings étaient 42 ms pour créer une instance, obtenir la trace de la pile et de la jeter par rapport à environ 0,6 ms pour générer de la deuxième et les suivantes traces à l'aide du même objet.
Juste quelque chose à garder à l'esprit.