Συμπτώματα
Ας υποθέσουμε ότι έχετε κάνει αναβάθμιση σε Microsoft .NET Framework 4.6 στον υπολογιστή σας. Όταν χρησιμοποιείτε μια εφαρμογή που χρησιμοποιεί το πλαίσιο επικοινωνίας των Windows (WCF) για να στείλετε μηνύματα XML SOAP, η κωδικοποίηση μπορεί να διαρκέσει λίγο περισσότερο χρόνο. Σε ορισμένες περιπτώσεις, αυτό μπορεί να επηρεάσει το ρυθμό με τον οποίο μια εφαρμογή διακομιστή μπορεί να επεξεργαστεί αιτήσεις.
Αιτία
Αυτό το ζήτημα παρουσιάζεται εξαιτίας ενός νέου έγκαιρος (JIT) του που ονομάζεται RyuJIT. Το πρόγραμμα μεταγλώττισης χρησιμοποιεί διαφορετικών βελτιστοποιήσεων από το πρόγραμμα μεταγλώττισης παλαιού τύπου JIT64. Μια μέθοδος σε μια διαδρομή θερμών κώδικα για την κωδικοποίηση συμβολοσειρές με το XmlDictionaryWriter, απαιτείται δεν έχει βελτιστοποιηθεί για το νέο πρόγραμμα μεταγλώττισης JIT και τις που δημιουργήθηκε εγγενή οδηγίες εκτελούνται πιο αργά και την κωδικοποίηση διαρκεί περισσότερο. Όταν ένα μήνυμα SOAP περιέχει μεγάλο αριθμό συμβολοσειρές για κωδικοποίηση, αυτός ο κωδικός πιο αργή χρησιμοποιείται πιο συχνά και μπορεί να επηρεάσει το χρόνο κωδικοποίησης.
Προτεινόμενη αντιμετώπιση
Για να επιλύσετε αυτό το ζήτημα, ρυθμίστε τις παραμέτρους της εφαρμογής, για να απενεργοποιήσετε τη χρήση ngen για τη συναρμολόγηση του System.Runtime.Serialization.dll και να χρησιμοποιούν το μηχανισμό JIT παλαιού τύπου. Για να γίνει αυτό, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους:
-
Ορίστε τις παρακάτω μεταβλητές περιβάλλοντος:
COMPLUS_useLegacyJit=1 COMPLUS_DisableNativeImageLoadList=System.Runtime.Serialization -
Στο μητρώο, μπορείτε να δημιουργήσετε οποιαδήποτε από τα ακόλουθα δευτερεύοντα κλειδιά:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework Στη συνέχεια, προσθέστε τις ακόλουθες τιμές:-
Όνομα κλειδιού: useLegacyJit
Τύπος: REG_WORD Τιμή: 1 -
Όνομα κλειδιού: DisableNativeImageLoadList
Τύπος: REG_SZ Τιμή: System.Runtime.Serialization
-
-
Προσθέστε το ακόλουθο κείμενο στην < εφαρμογή >. exe.config αρχείο. Εάν δεν υπάρχει ήδη, δημιουργήστε τις ενότητες που υποδεικνύεται.<configuration> <runtime>
<useLegacyJit enabled="1"> <disableNativeImageLoad> <assemblyIdentity name="System.Runtime.Serialization" /> </disableNativeImageLoad> </runtime> </configuration>
Περισσότερες πληροφορίες
Για περισσότερες πληροφορίες σχετικά με τις αλλαγές της τήρησης ιστορικού εκδόσεων προϊόντος και τα αποτελέσματά τους στο το 4.6 του .NET Framework, ανατρέξτε στο θέμα Συμβατότητα εφαρμογών στα το 4.6 του .NET Framework.