ready-4 IT

Collision VS Code avec Bitdefender (du bip à la solution)

Ce site & mes outils – aujourd'hui : Collision VS Code avec Bitdefender

Aujourd'hui était l'un de ces jours où l'on pense d'abord « Matériel cassé ?! » et à la fin c'est une chaîne de :

  • 4 espaces de travail ouverts
  • Projets sur un HDD lent (I/O aléatoire)
  • VS Code / Git File Watching
  • Bitdefender (bdservicehost.exe), qui scanne à chaque accès

Le résultat : Windows est devenu extrêmement lent et a même bipé.

J'écris cela délibérément comme un rapport d'expérience — y compris des extraits copy/paste — parce que c'est exactement ce genre d'articles qui m'aide au quotidien.

TL;DR (Quick Wins)

Si vous n'avez pas le temps pour toute l'histoire, commencez ici :

1) VS Code : Désactiver Git Autorefresh (un game changer pour les grands dépôts / disques lents)

// User Settings (settings.json)
{
  "git.autorefresh": false
}

2) VS Code : Neutraliser les Watchers (réduit les I/O + déclenche l'antivirus moins souvent)

{
  "files.watcherExclude": {
    "**/node_modules/**": true,
    "**/vendor/**": true,
    "**/.git/objects/**": true,
    "**/__pycache__/**": true,
    "**/.venv/**": true,
    "**/.pytest_cache/**": true
  }
}

3) Bitdefender : Les projets sont déjà exclus ? Bien. Ajoutez ensuite les chemins système VS Code (Extensions/Cache) aux exceptions.

4) Si possible : placer les dépôts actifs sur SSD/NVMe. HDD + nombreux petits fichiers est le piège à performance parfait.


Comment ça a commencé : le bip

Symptôme : Windows bipe (pour moi quelque chose comme « 2× court ... longue pause ... puis 2× court plus rapide »), mais :

  • pas au démarrage,
  • mais pendant que Windows tourne,
  • et en même temps tout devient mou.

C'est inquiétant parce qu'on pense d'abord aux codes bip du BIOS. Mais pour moi ce n'était pas un problème de démarrage — c'était un « système surchargé et l'entrée semble bloquée ».


Diagnostic : Gestionnaire des tâches & Moniteur de ressources

1) Gestionnaire des tâches

Le CPU n'était pas le coupable (pour moi ~17%). Ce qui était notable :

  • Disque nettement élevé !
  • VS Code (Code.exe) avec une charge disque notable

resources_problems

2) Le regard décisif : Active Time & Queue

Dans le Moniteur de ressources (onglet « Disque ») on voit deux choses qui en disent souvent plus que « MB/s » :

blocker_01

  • Active Time 100% sur le HDD
  • Queue Length élevée (arriéré de requêtes)

Ça se ressent comme :

  • La frappe lag,
  • Les clics sont « avalés »,
  • le système répond avec un délai,
  • et ça peut même causer des bips.

La véritable cause racine

Pour moi c'était une collision de :

1) Nombreux petits fichiers

  • Node : node_modules/ (des dizaines de milliers de fichiers)
  • PHP : vendor/
  • Python : .venv/, __pycache__/
  • Git : .git/ (Objects, Index, Status-Reads)

2) VS Code Watcher + Git Autorefresh

  • VS Code interroge Git régulièrement.
  • Git touche énormément de fichiers dans le processus.

3) Bitdefender scanne en parallèle

  • bdservicehost.exe lit en même temps.
  • Même si le débit de données n'est « que » de 10–20 MB/s, un HDD peut être complètement à sa limite à cause des I/O aléatoires.

4) Plusieurs espaces de travail simultanément

  • 4 fenêtres/espaces de travail multiplient la charge du watcher.

Mesures (Copy/Paste) + Justification

A) Paramètres VS Code / Cursor

Colonnes
"git.autorefresh": false
User Settings
Empêche le scan Git permanent en arrière-plan ; réduit massivement les I/O.
files.watcherExclude pour node_modules, vendor, etc.
User Settings
Des milliers d'événements de fichiers en moins → moins de charge disque → antivirus déclenché moins souvent.
Grands espaces de travail sur SSD
Filesystem
HDD + I/O aléatoire est la pire combinaison pour les dépôts de développement.

Optionnel (si vous utilisez ESLint/Prettier intensivement) :

{
  "eslint.run": "onSave",
  "prettier.requireConfig": true,
  "editor.formatOnSave": true
}

Pourquoi ça aide :

  • ESLint onType peut sembler « tourner en continu » dans les grands monorepos.
  • prettier.requireConfig empêche Prettier de démarrer automatiquement partout où il ne devrait pas.

B) Exceptions Bitdefender (Dossiers)

Bitdefender n'accepte généralement pas les wildcards comme **/node_modules/**. Mais ce n'est pas nécessaire si vous regroupez vos racines de projet proprement.

bitdefender_01

Exceptions de dossiers recommandées :

Colonnes
Projets (Racine)
F:\\r4it et F:\\Vagrant
Couvre automatiquement les sous-répertoires (incl. <code>node_modules</code>, <code>vendor</code>, <code>.venv</code>).
Extensions VS Code
%USERPROFILE%\\.vscode\\extensions
Empêche les scans lors du chargement/mise à jour des extensions.
VS Code User Data / Cache
%APPDATA%\\Code
Réduit les latences de lecture/écriture des logs, cache, état.
Installation Git (optionnel)
C:\\Program Files\\Git
Moins de friction avec les outils Git.

C) Exceptions Bitdefender (Processus) – si ATD ne peut pas être activé pour les dossiers

De nombreuses interfaces Bitdefender ne permettent pas d'activer Advanced Threat Defense (ATD) pour les dossiers. Alors la seule option est : exceptions de processus.

Processus recommandés :

Colonnes
VS Code
%LOCALAPPDATA%\\Programs\\Microsoft VS Code\\Code.exe
VS Code effectue de nombreuses opérations de fichiers ; ATD peut ralentir.
Git
C:\\Program Files\\Git\\bin\\git.exe (ou cmd\\git.exe)
Git touche énormément de fichiers ; empêche le « scanner entre-deux ».
Node
C:\\Program Files\\nodejs\\node.exe
Les outils Node + watcher + npm travaillent avec de très nombreux petits fichiers.
PHP
php.exe (selon la configuration)
Composer/vendor I/O, scans, builds.
Python
python.exe (selon la configuration)
venv/cache/test caches.

Note de sécurité : Définissez des exceptions uniquement pour des dossiers/outils de confiance. J'utilise cela comme un compromis de performance pour les dossiers de développement, pas pour les téléchargements/ZIPs aléatoires.


Pourquoi node_modules / vendor sont si importants ici

Ces dossiers ne sont pas « grands » parce qu'ils ont beaucoup de MB — mais parce qu'ils ont beaucoup de fichiers individuels.

Les HDD sont brutalement lents avec « de nombreuses petites lectures ». Watcher + Git + Antivirus transforme cela en file d'attente permanente.


Conclusion

Le plus grand moment « aha » pour moi était de voir combien Git Autorefresh peut déclencher en combinaison avec un HDD.

Si vous voulez tester juste une chose immédiatement : désactivez git.autorefresh — et observez ce qui arrive à Queue Length.

Quand l'éditeur semble soudainement lent (lag de frappe, CPU élevé, ventilateurs), ce n'est souvent pas « l'extension », mais l'interaction des watchers de fichiers et du scan antivirus.

Voici à quoi ressemble la récompense !

resources_final

Le résultat : Travail nettement plus rapide. La Queue Length est descendue de parfois plus de 90 000 à moins de 15 000 — même avec plusieurs espaces de travail ouverts.

Ceci est une liste de contrôle pragmatique — prenez juste les points dont vous avez besoin.

Informations système (abrégées) - OS : Windows 10 Home (2009) - CPU : Intel Core i9-13900KF - RAM : 32 GB - Stockage : 1 TB NVMe (SSD) + 12 TB HDD (typ. 7200 RPM) - Contrôleur : SATA AHCI + NVMe - VS Code : 1.106.3 - Bitdefender : Total Security Build 27.0.55.303 En termes purement computationnels, la combinaison de CPU moderne, 32 GB RAM et NVMe+HDD aurait dû pouvoir gérer la charge ; le goulot d'étranglement s'explique mieux par une charge IOPS très élevée (nombreuses petites opérations de fichiers) combinée avec des scans AV et des interactions de watcher.

Symptômes

  • VS Code (ou Cursor/VSCodium) devient lent lors de la frappe/sauvegarde.
  • Git est lent, git status prend beaucoup de temps dans les grands dépôts.
  • Charge CPU dans Bitdefender/Antimalware ou dans le processus watcher.

Cause typique

  • Les grands espaces de travail génèrent de nombreux événements du système de fichiers.
  • L'antivirus scanne les fichiers modifiés à répétition.
  • Le watcher déclenche plus de travail → boucle de rétroaction.

Mesures recommandées

1) Exclure l'espace de travail dans Bitdefender (ou AV)

  • Excluez le(s) dossier(s) racine où se trouvent vos dépôts.
  • Avec Vagrant/Shared Folders, excluez également ces chemins.

2) Exclure les caches d'outils / dossiers temporaires Exemples (à adapter) :

  • node_modules/
  • .git/
  • Sortie de build
  • grands caches (composer, npm, …)

3) Réduire la charge du watcher Si vous n'avez pas besoin de surveillance en direct partout :

  • exclure les dossiers générés de la surveillance dans VS Code
  • éviter les énormes combinaisons « monorepo + vendor + build »

Note

  • Ce n'est pas un conseil de sécurité, mais un compromis performance/productivité.
  • Date : 02.02.2026