Introduction
- Optimiser : quoi, comment, quand ? Objectifs.
Fabrication des codes IL et machine
- Efficacité intrinsèque des différents langages.
- Utiliser C++ (managé ?) pour les parties sensibles ?
- Etapes de la fabrication : compilateur et CLR.
Exercice
Instrumentation du code C#, C++ et C++ managé.
Les constructions simples du langage
- Traitement des chaînes de caractères.
- Performance des classes et des structures.
- Exceptions. Delegates et lambdas. Interfaces et fonctions virtuelles.
Exercice
Exercice et démonstration sur les éléments de codage.
Le moniteur de performances
- Fonctionnement. Anciens compteurs toujours utiles, nouveautés .NET, compteurs personnalisés.
Le ramasse-miettes GC
- La gestion de la mémoire. Les “finaliseurs”, le pattern Dispose. Utilisation d'un profileur et de SOS.DLL.
Exercice
Détection et correction des fuites de mémoire.
Optimisation et librairies externes
- Portage depuis COM ou Win32, coût de la réutilisation. Accès aux DLL système ou utilisateur : Interop et P/Invoke. Le marshaling et son coût.
Exercice
Comparaison C# et P/Invoke versus C++ mixte.
Communications interdomaines
- Domaine d'application et .NET Remoting : rappels.
- Communication entre domaines : d'un même processus, de processus différents.
- Mesure de performances. Les règles à respecter.
La gestion des threads
- Optimiser les traitements concurrents et leur synchronisation. Interblocages. Utilisation du pool de threads ou création de threads. Les appels asynchrones.
Paralléliser les traitements
- La librairie de parallélisation de Microsoft. Nouvelles classes de System.Threading. Synchronisation.
Optimisation de la phase de démarrage
- Agir à ce niveau ? Chargement des assemblages, initialisations, précompilation avec NGEN.
Conception et architecture des programmes
- Une synthèse et quelques conseils.
- Bien concevoir ses classes.
- Gestion de cache pour les données.
- Utilisation de composants distants : le pattern "Facade".
- Processus différents ou Application Domains ?