Je sais que la documentation de log4net indique que la journalisation des informations sur l’emplacement de l’appelant peut être très lente et ne doit pas être utilisée à moins que les performances du logiciel ne soient pas affectées.
Et jusqu’à la mise à jour de Windows 10 Fall Creators, c’était le cas. Voici un petit exemple de projet.
app.config
<!---->
Program.cs
using System; using System.Diagnostics; using log4net; namespace Log4Net.CSharp { class Program { private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); static void Main(ssortingng[] args) { LoggingTest(1000); Console.ReadKey(); } private static void LoggingTest(int iterations) { Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < iterations; i++) { Log.Info("Some info logging."); } Console.WriteLine($"Logging of {iterations} iterations took: {sw.ElapsedMilliseconds} ms."); } } }
Après la mise à jour de Windows (1709), les performances avec des informations sur l’emplacement de l’appelant telles que% C% M% L sont environ 100 fois moins bonnes que sans. Le problème est certainement lié à la mise à jour car après une restauration, les performances sont revenues à la normale.
Résultats avant la mise à jour de Windows (1709)
sans% C% M% L: La journalisation de 1000 itérations a pris: 18 ms.
w% C% M% L: La journalisation de 1000 itérations a pris: 81 ms.
Résultats après la mise à jour de Windows (1709)
sans% C% M% L: La journalisation de 1000 itérations a pris: 14 ms.
w% C% M% L: La journalisation de 1000 itérations a pris: 1502 ms.
Quelqu’un peut-il confirmer ce problème ou avoir une idée de ce qui se passe?
Je suis reconnaissant pour tout conseil sur la façon de déboguer / résoudre le problème. Merci d’avance!
Microsoft a mis à jour l’article mentionné il y a quelques jours ( https://support.microsoft.com/en-us/help/4057154/performance-of-system-diagnostics-stackframe-degrades-in-windows-10-17 ) et Comme le dit Jeeze dans un commentaire, la nouvelle mise à jour ( https://support.microsoft.com/en-us/help/4058258 ) résout le problème indépendamment du .NET Framework utilisé.