απαιτήσεις: Όταν κοίταξα τον πηγαίο κώδικα .NET, διαπίστωσα ότι ορισμένες μέθοδοι έχουν προσθέσει τη δυνατότητα [MethodImpl(MethodImplOptions.AggressiveInlining)], αλλά είδα ότι η δυνατότητα MethodImpl μπορεί να επηρεάσει τη συμπεριφορά του μεταγλωττιστή JIT. Ορισμένες δοκιμές πραγματοποιήθηκαν με βάση πληροφορίες στο Διαδίκτυο.
Διαμόρφωση MethodImplOptions
Κώδικας:
Ενσωματωμένη λειτουργία
Στην επιστήμη των υπολογιστών, μια ενσωματωμένη συνάρτηση (μερικές φορές ονομάζεται διαδικτυακή συνάρτηση ή συνάρτηση επέκτασης χρόνου μεταγλώττισης) είναι μια κατασκευή γλώσσας προγραμματισμού που χρησιμοποιείται για να προτείνει ότι ο μεταγλωττιστής ενσωματώνει επεκτάσεις (μερικές φορές ονομάζονται διαδικτυακές επεκτάσεις) σε ορισμένες ειδικές συναρτήσεις. Αυτό σημαίνει ότι ο μεταγλωττιστής εισάγει και αντικαθιστά το καθορισμένο σώμα συνάρτησης στη θέση κάθε θέσης (περιβάλλοντος) όπου καλείται η συνάρτηση, εξοικονομώντας τον επιπλέον χρόνο που δαπανάται για κάθε κλήση στη συνάρτηση. Ωστόσο, όταν επιλέγετε να χρησιμοποιήσετε ενσωματωμένες συναρτήσεις, είναι απαραίτητο να σταθμίσετε τον χώρο που καταλαμβάνει το πρόγραμμα και την αποτελεσματικότητα της εκτέλεσης του προγράμματος, επειδή πάρα πολλές σύνθετες λειτουργίες για ενσωματωμένη επέκταση θα επιφέρουν μεγάλα έξοδα πόρων αποθήκευσης. Είναι επίσης σημαντικό να σημειωθεί ότι οι ενσωματωμένες επεκτάσεις αναδρομικών συναρτήσεων μπορεί να προκαλέσουν άπειρη μεταγλώττιση ορισμένων μεταγλωττιστών.
MethodImplOptions.AggressiveInlining
Λειτουργία: Συνιστάται ο μεταγλωττιστής JIT να ενσωματώνει τη μέθοδο όσο το δυνατόν περισσότερο. Επεξήγηση: Το Inline αναφέρεται στην αντικατάσταση μιας κλήσης συνάρτησης με το ίδιο το σώμα της συνάρτησης, μειώνοντας έτσι την επιβάρυνση της κλήσης συνάρτησης. Ισχύοντα σενάρια: Κατάλληλο για μικρές, συχνά αποκαλούμενες μεθόδους (π.χ. προσθήκες χαρακτηριστικών, απλοί μαθηματικοί υπολογισμοί κ.λπ.). Σημείωση: Αυτό είναι απλώς μια "πρόταση", ο μεταγλωττιστής JIT μπορεί να αποφασίσει αν θα κάνει πραγματικά inline ή όχι, ανάλογα με την πραγματική κατάσταση.
Τα αποτελέσματα της δοκιμής "inline" και "not inline" είναι τα εξής:
Ο κωδικός δοκιμής έχει ως εξής:
Διαπιστώθηκε ότι η χρήση της CPU μετά το inline ήταν πολύ χαμηλότερη από αυτή των μη ενσωματωμένων κλήσεων, στην πραγματικότητα, επίσηςΜην αγχώνεστε πολύ, οι σημερινοί μεταγλωττιστές είναι πολύ έξυπνοι, ακόμη και χωρίς να προσθέσετε αυτήν τη δυνατότητα, ο μεταγλωττιστής μπορεί να σας βοηθήσει να βελτιστοποιήσετε αυτόματα。 |