🔷 1. ✅ Bonnes pratiques générales de performance
| Pratique |
Explication |
| Évitez les allocations inutiles |
Utilisez des structures (struct) pour les petits types, évitez les conversions implicites (boxing). |
| Utilisez les bons types de collection |
List<T> au lieu d’ArrayList, Dictionary<TKey, TValue> pour les recherches rapides. |
Préferez foreach à for quand possible |
Plus lisible, mais attention au coût sur les collections non optimisées. |
| Réutilisez les objets |
Par exemple, évitez de recréer des objets comme HttpClient à chaque appel. |
| Favorisez les expressions LINQ simples |
LINQ est puissant mais peut être coûteux si mal utilisé. Privilégiez .ToList() uniquement quand nécessaire. |
🔷 2. 💡 Optimisation mémoire et allocations
| Pratique |
Exemple |
Utilisez Span<T> / ReadOnlySpan<T> pour les gros tableaux (si .NET Core ou +) |
Span<char> évite des copies de chaînes. |
Utilisez StringBuilder pour la concaténation répétée |
Ne faites pas str += "..."; dans une boucle. |
Utilisez ArrayPool<T> pour recycler de gros tableaux |
Évite les GC sur les buffers volumineux. |
Privilégiez readonly struct si l'objet ne change pas |
Moins de copies, plus de performance. |
🔷 3. 🧠 Écriture de code efficace et lisible
| Pratique |
Exemple |
| Nommez clairement vos méthodes / variables |
CalculateInvoiceTotal() > Calc(). |
| Gardez les méthodes courtes et ciblées |
Une fonction = une responsabilité. |
| Évitez la duplication de code (DRY) |
Regroupez le code commun en méthodes. |
| Utilisez les interfaces pour tester et injecter |
Favorise le découplage. |
Utilisez var intelligemment |
var quand le type est évident (var list = new List<string>()) |
🔷 4. 🧪 Profiling, benchmarking et analyse
| Outil / Technique |
But |
BenchmarkDotNet |
Pour comparer la performance de plusieurs méthodes |
| Visual Studio Diagnostic Tools |
Pour analyser la mémoire, les threads, le CPU |
| JetBrains dotMemory / dotTrace |
Pour profiler en profondeur |
| GC.GetTotalMemory() |
Pour estimer les allocations mémoire |
🔷 5. 🧰 Exemples concrets de bonne optimisation
❌ Mauvais
string result = "";
for (int i = 0; i < 1000; i++)
{
result += i.ToString();
}
✅ Bon
var sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append(i);
}
string result = sb.ToString();
❌ Mauvais (LINQ mal utilisé)
var count = myList.Where(x => x > 10).Count();
✅ Bon
var count = myList.Count(x => x > 10);
✅ Récapitulatif des best practices C#
| Catégorie |
Pratique essentielle |
| Performance |
Éviter les allocations, éviter le boxing |
| Mémoire |
Utiliser Span, ArrayPool, StringBuilder |
| Code propre |
Petites méthodes, noms clairs, DRY |
| Architecture |
Injection de dépendance, interfaces |
| Analyse |
BenchmarkDotNet, outils Visual Studio |
Aucun commentaire:
Enregistrer un commentaire