Η απόδοση System.Diagnostics.StackFrame υποβαθμίζεται στα Windows 10

Εάν μετά την αναβάθμιση σε Windows 10 ή .NET Framework 4.7.1 και παρατηρήσετε σημαντική μείωση στην απόδοση όταν εκτελείτε εφαρμογές .NET Framework που χρησιμοποιούν την κλάση System.Diagnostics.StackFrame , τότε αυτή η ανάρτηση μπορεί να σας ενδιαφέρει. Θα εξετάσουμε την αιτία και στη συνέχεια θα προσφέρουμε γνωστές διορθώσεις για το σφάλμα.

Η απόδοση System.Diagnostics.StackFrame υποβαθμίζεται

Η απόδοση System.Diagnostics.StackFrame υποβαθμίζεται

Μια εφαρμογή που είχε αποδεκτές επιδόσεις που εκτελούνταν στο .NET Framework 4.7 ή παλαιότερες εκδόσεις, εκτελείται πιο αργά όταν εκτελείται στο .NET Framework 4.7.1 . Οι εφαρμογές συνήθως βασίζονται στο StackFrame όταν δημιουργούν εξαιρέσεις .NET. Εάν αυτό συμβεί με υψηλό ρυθμό (περισσότερα από 10 περιστατικά ανά δευτερόλεπτο), οι εφαρμογές μπορεί να επιβραδυνθούν σημαντικά (δεκαπλάσια) και να λειτουργήσουν αισθητά πιο αργά από πριν.

Αιτία της υποβάθμισης της απόδοσης του System.Diagnostics.StackFrame(Cause of the System.Diagnostics.StackFrame performance degrade)

Το .NET Framework 4.7.1 στα Windows 10 προσέθεσε υποστήριξη για τον εντοπισμό και την ανάλυση της μορφής αρχείου Portable PDB για την εμφάνιση πληροφοριών αρχείου και αριθμού γραμμής σε ίχνη στοίβας. (PDB)Ως μέρος αυτής της αλλαγής, κάθε συνάρτηση σε ένα ίχνος στοίβας ελέγχεται η καθοριστική της ενότητα για να προσδιοριστεί εάν αυτή η λειτουργική μονάδα χρησιμοποιεί τη μορφή φορητού PDB . Λόγω(Due) κάποιων διαφορών στην πολιτική εσωτερικής προσωρινής αποθήκευσης, ο χρόνος εκτέλεσης αφιερώνει πολύ περισσότερο χρόνο στην αναζήτηση φορητών PDB(Portable PDBs) από ό,τι προηγούμενες εκδόσεις .NET Framework για αναζήτηση κλασικών (Framework)PDB των Windows(Windows PDBs) .

Αυτό προκαλεί την παραγωγή μορφοποιημένων ιχνών στοίβας πιο αργά από πριν.

Αυτό το ζήτημα δεν αλλάζει τον αριθμό των εξαιρέσεων που γίνονται. Ωστόσο, μειώνει σημαντικά την ικανότητα των εφαρμογών να χειρίζονται αυτές τις εξαιρέσεις.

Οι εφαρμογές που χρησιμοποιούν τη βιβλιοθήκη IKVM είναι γνωστό ότι επηρεάζονται από αυτό το ζήτημα εάν πραγματοποιούν ανίχνευση συγκροτημάτων. Η ανίχνευση για συγκροτήματα είναι γνωστό ότι προκαλεί εξαιρέσεις.

Επιδιόρθωση(Fix System.Diagnostics.StackFrame) ζητήματος υποβάθμισης της απόδοσης System.Diagnostics.StackFrame

Για να επιλύσετε αυτό το ζήτημα, η Microsoft συνιστά τη χρήση μίας από τις ακόλουθες μεθόδους.

1] Χρησιμοποιήστε έναν διαφορετικό κατασκευαστή για το StackFrame που παίρνει ένα όρισμα Boole(1] Use a different constructor for StackFrame that takes a Boolean argument)

Αυτή είναι η προτιμώμενη λύση.

Εάν οι προγραμματιστές εφαρμογών μπορούν να κάνουν αλλαγές στις εφαρμογές τους, καλέστε το (call the) System.Diagnostics.StackTrace. Κατασκευαστής #ctor( Boolean ) χρησιμοποιώντας ένα ψευδές όρισμα για να αποφευχθεί η καταγραφή πληροφοριών πηγής. Αυτό αποφεύγει την ενότητα του κώδικα στην οποία μειώνεται η απόδοση.

2] Επαναφορά ή αναβάθμιση στην πιο πρόσφατη έκδοση των Windows 10(2]  Rollback or upgrade to the latest Windows 10 version)

Σε αυτήν τη μέθοδο, επιστρέψτε στην προηγούμενη έκδοση/κατασκευή ή upgrade to the latest version/build  των Windows 10 , εάν αντιμετωπίζετε αυτό το πρόβλημα και δεν εκτελείτε αυτήν τη στιγμή την πιο πρόσφατη έκδοση των Windows 10 . Επίσης, απεγκαταστήστε το .NET Framework 4.7.1 , εάν υπάρχει, από τον υπολογιστή σας και, στη συνέχεια, πραγματοποιήστε λήψη(download) και εγκατάσταση μιας προηγούμενης έκδοσης ή της πιο πρόσφατης έκδοσης του .NET Framework .

Hope this helps!



About the author

Είμαι έμπειρος ειδικός στα windows 10 και 11/10, με εμπειρία τόσο σε προγράμματα περιήγησης όσο και σε εφαρμογές smartphone. Είμαι μηχανικός λογισμικού για περισσότερα από 15 χρόνια και έχω συνεργαστεί με μια σειρά από μεγάλες εταιρείες, όπως η Microsoft, η Google, η Apple, η Ubisoft και άλλες. Έχω διδάξει επίσης ανάπτυξη windows 10/11 σε επίπεδο κολεγίου.



Related posts