Θα προσπαθήσω να σε διαφωτίσω με όσο πιο απλά ελληνικά μπορώ
"Τα XML Web Services είναι εφαρμογές που τρέχουν πάνω σε έναν Web Server και κάνουν expose API functions, ή Web Methods, τα οποία μπορούν να χρησιμοποιηθούν από clients στο internet." Τί σημαίνει κάνουν expose API functions? Kαι γενικά περισσότερη ανάλυση δεν έχω καταλάβει εδώ πολλά
Σκέψου ότι έχεις ένα object κάάάάάάπου στο Internet, έστω Matina. Σκέψου πως το object Matina έχει μια συνάρτηση TonightWeDineInHell(string Spartans). Ε, πολύύύύύύ εύκολα κάνεις μία αναφορά (reference) από το πρόγραμμά που φτιάχνεις στο object Matina, και καλείς τη μέθοδό που σου είπα λες και το object είναι τοπικό. Οπότε, λέμε ότι το object - web service Matina κάνει expose το API του (application programming interface) που αποτελείται από τη συνάρτηση TonightWeDineInHell.
Το CLR περιλαμβάνει ένα garbage collector ο οποίος καταγράφει τις αναφορές στα objects και καταστρέφει τα objects όταν η μνήμη την οποία καταλαμβάνουν δεν γίνεται πλέον referenced και χρειάζεται κάπου αλλού." Δεν έχω καταλάβει ακροβώς πότε καταστρέφει τα objects o garbage collector. Ίσως λίγα παραπάνω λόγια για το ρόλο του.
Heh. Κάποτε
. Σοβαρά τώρα, η εκτέλεση του garbage collector είναι μη ντετερμινιστική, δηλαδή ΔΕΝ ξέρεις πότε θα κληθεί (εκτός κι αν τον καλέσεις manually => GC.Collect();). Τρέχει όποτε το σύστημα χρειάζεται μνήμη. Όταν κληθεί πάντως, θα 'καθαρίσει' σωστά όόόόλα τα managed objects που έχεις δημιουργήσει. Το CLR χρησιμοποιεί έναν από τους πολλούς αλγόριθμους για garbage collection, και συγκεκριμένα εκείνον που αντιστοιχίζει κάθε object που δημιουργείται σε μία γενιά αντικειμένων. Υπάρχουν στο .ΝΕΤ 3 γενιές αντικειμένων (0,1,2). Κάθε object που δημιουργείται πάει στη γενιά 0. Όταν γίνει ένα garbage collection, και το αντικείμενο 'επιζήσει' (για τον χ ή ψ λόγο, π.χ. υπάρχει στη στοίβα ένα reference πάνω του), τότε προάγεται στη γενιά 1. Ο Garbage Collector, αφού κάνει Collect στη γενιά 0 και ΔΕΝ επαρκεί η μνήμη, τότε θα κάνει collect την 1 κ.ο.κ. Πώς ξέρει ο GC ποια αντικείμενα να κάνει release; Κρατάει δείκτες στη μνήμη που ονομάζονται roots. Για κάθε αντικείμενο που δημιουργείται (συγκεκριμένα για static πεδία, για παραμέτρους συναρτήσεων, για τοπικές μεταβλητές) δημιουργείται και άλλο ένα object root. Οπότε, προφανώς, ο GC ξέρει μέσω των roots ποια αντικείμενα χρησιμοποιούνται και ποια όχι. Και για να αποφευχθεί το πρόβλημα του να γίνει collect ένα αντικείμενο το οποίο 'κρέμεται' από κάποιο άλλο, ο GC δημιουργεί object graphs με τα αντικείμενα που είναι στη μνήμη κάθε φορά που εκτελείται. Για όλους τους παραπάνω λόγους και όχι μόνο, είναι πασιφανές ότι το Garbage Collection έχει μεγάλο overhead.
Στον Μanaged Code τί είναι ακριβώς το Windows Portable Executable File Header? Πού χρησιμεύει?
Τα εκτελέσιμα αρχεία, γενικά, ονομάζονται ELF στα *nix συστήματα και PE στα Win32 συστήματα (PE == portable executable). Όταν λοιπόν πας να εκτελέσεις ένα exe, τότε το λειτουργικό (και πιο συγκεκριμένα ο Process Loader του λειτουργικού) ψάχνει το header του αρχείου για να δει αν είναι όντως valid (σίγουρα θα έχεις πετύχει το μήνυμα "This application is not a valid Win32 application"). Αν είναι, το εκτελεί. Τώρα στην περίπτωσω που είναι εγκατεστημένο το .ΝΕΤ Framework στο μηχάνημα τότε ο process loader τροποποιείται, έτσι ώστε, μόλις δει ένα managed application, να δώσει τον έλεγχο στο CLR.
Το PE32 header περιέχει πληροφορίες για το πότε έγινε built το αρχείο, αν είναι GUI, CUI (console user interface) ή DLL (dynamically linked library). Αν το αρχείο περιέχει native CPU code, τότε περιέχει πληροφορίες για τον κώδικα. Αν δε, είναι managed, τότε αγνοείται ένα μεγάλο μέρος του και το CLR διαβάζει το CLR Header του αρχείου, τα μεταδεδομένα, και το IL.
Στην επόμενη διαφάνεια όμως "Ισχυρά και όχι-ισχυρά ονόματα για Assemblies" δεν καταλαβαίνω σχεδόν κανένα από τους όρους
.
Μία assembly λέμε ότι έχει strong name όταν, για να εξασφαλιστεί η μοναδικότητα και η αυθεντικότητά της, την συσχετίζουμε με το Al.exe με ένα ζευγάρι δημοσίου - ιδιωτικού κλειδιού (ναι, ναι αυτά που ξέρεις από την κρυπτογραφία) το οποίο έχει γίνει generate από το sn.exe.