Recuperare 50-100 GB: Guida Completa alla Pulizia Disco per Sviluppatori .NET, Giochi e Desktop
Ogni sviluppatore di software e videogiochi su Windows prima o poi vive questo incubo: accendi il PC, apri il tuo ambiente di sviluppo e improvvisamente Windows avvisa che sul tuo SSD NVMe da 1 TB sono rimasti meno di 2 GB di spazio libero.
Non hai scaricato video enormi né installato giochi pesanti. Dove è finito tutto lo spazio?
Lavorando come sviluppatore indie su progetti .NET 8/9, MonoGame, Android e Windows Application Packaging (MSIX/WAP per Microsoft Store), ho analizzato a fondo questa crisi di memoria. Tramite una scansione automatica nei miei repository, ho scoperto che oltre 68 GB erano occupati esclusivamente da file temporanei di compilazione, vecchi pacchetti di pubblicazione e cache di dipendenze.
In questa guida spieghiamo perché le moderne pipeline di sviluppo consumano così tanto spazio, perché eliminare queste cartelle è sicuro al 100% e forniamo uno script PowerShell e Batch per liberare decine di gigabyte in un clic.
1. Da dove nasce lo spreco di spazio su disco?
Compilando soluzioni multipiattaforma per Desktop, Mobile (Android) e Microsoft Store, i compilatori duplicano binari intermedi e risorse a ogni passaggio:
flowchart TD
subgraph "Workspace di Progetto"
Code["Codice Sorgente (.cs, .xaml, .json)\n(Protetto - Pochi MB)"]
Assets["Asset Originali (PNG, OGG, Shader)\n(Protetto)"]
Git["Cronologia .git\n(Protetto)"]
BinObj["Cartelle bin e obj\n(DLL intermedie, simboli)\n[30 - 60 GB]"]
AppPackages["WAP / MSIX AppPackages\n(Storico pacchetti store)\n[5 - 20 GB]"]
end
subgraph "Cache di Sistema"
NuGet["%USERPROFILE%\\.nuget\\packages\n(Cache Globale NuGet)\n[10 - 20 GB]"]
Temp["%LOCALAPPDATA%\\Temp\n(File temporanei del compilatore)\n[3 - 10 GB]"]
end
style BinObj fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
style AppPackages fill:#ff6b6b,stroke:#c92a2a,stroke-width:2px,color:#fff
style NuGet fill:#ff922b,stroke:#d9480f,stroke-width:2px,color:#fff
style Temp fill:#ff922b,stroke:#d9480f,stroke-width:2px,color:#fff
Causa A: Cartelle bin e obj (30 - 60+ GB)
obj/(Output Intermedio): Mantiene gli stati della compilazione incrementale. Per i target Android, questa cartella può raggiungere da 3 a 6 GB per singolo progetto.bin/(Output Binario): Contiene gli eseguibili e tutte le risorse duplicate tramite<CopyToOutputDirectory>. Se 10 progetti referenziano una cartella comune di 500 MB di asset, quel contenuto viene copiato 10 volte (5 GB sprecati).
Causa B: Cartelle AppPackages di Microsoft Store (5 - 20+ GB)
Quando si creano pacchetti di pubblicazione, Visual Studio genera file .msixbundle e .msixupload (con simboli PDB completi). Visual Studio non cancella mai automaticamente le versioni precedenti.
Causa C: Cache Globale NuGet (10 - 20+ GB)
In %USERPROFILE%\.nuget\packages viene conservata ogni singola versione di ogni pacchetto mai scaricato sulla macchina.
Causa D: File Temporanei di Windows (Temp) (3 - 10 GB)
Migliaia di file temporanei abbandonati da MSBuild e dagli strumenti di compressione in %LOCALAPPDATA%\Temp.
2. Garanzia di Sicurezza: Perché è Privo di Rischi al 100%?
| Protetto (NON viene mai toccato) | Sicuro da Eliminare (100% Rigenerabile) |
|---|---|
Codice Sorgente: .cs, .xaml, .cpp, .json |
File oggetto intermedi di compilazione (obj/) |
Definizioni di Progetto: .sln, .csproj, .wapproj |
Binari compilati e assembly duplicati (bin/) |
Repository Git: Cartella .git/, commit e branch |
Vecchi pacchetti di pubblicazione (AppPackages/) |
| Asset Originali: Texture, audio, modelli e shader | Pacchetti memorizzati nella cache locale (.nuget\packages) |
Certificati: .pfx, StoreAssociation.xml |
File temporanei del sistema operativo (%LOCALAPPDATA%\Temp) |
Cosa succede alla riapertura di Visual Studio?
Aprendo la soluzione e cliccando su Genera (Build) o Rigenera (Rebuild), il compilatore ricrea le cartellebineobjdal codice sorgente. NuGet riscarica i pacchetti mancanti. Nessun progresso viene perso.
3. Lo Script di Pulizia Automatizzato
Motore PowerShell (Clean-DevDiskSpace.ps1)
Salva questo script in _tools/Clean-DevDiskSpace.ps1:
<#
.SYNOPSIS
Strumento di Pulizia Disco per Sviluppatori
#>
[CmdletBinding()]
param (
[switch]$Force,
[switch]$ScanOnly,
[switch]$SkipNuget,
[switch]$SkipTemp,
[string]$RootPath = ""
)
if ([string]::IsNullOrWhiteSpace($RootPath)) {
if ($PSScriptRoot) { $RootPath = (Join-Path $PSScriptRoot "..") } else { $RootPath = Get-Location }
}
$resolvedRoot = (Resolve-Path $RootPath -ErrorAction SilentlyContinue).Path
if ([string]::IsNullOrWhiteSpace($resolvedRoot) -or $resolvedRoot -in @("C:\", "C:", "\", "/")) {
Write-Host "BLOCCO DI SICUREZZA: Percorso radice rilevato!" -ForegroundColor Red
exit 1
}
$systemDrive = Get-PSDrive -Name C
$freeGBBefore = [math]::Round($systemDrive.Free / 1GB, 2)
Write-Host "Spazio libero prima della pulizia: $freeGBBefore GB" -ForegroundColor Yellow
$binObjDirs = Get-ChildItem -Path $resolvedRoot -Recurse -Directory -Force -ErrorAction SilentlyContinue |
Where-Object { $_.Name -in @('bin', 'obj') }
$appPackageDirs = Get-ChildItem -Path $resolvedRoot -Recurse -Directory -Filter "AppPackages" -Force -ErrorAction SilentlyContinue
if ($ScanOnly) { Write-Host "Scansione terminata." -ForegroundColor Yellow; return }
if (-not $Force) {
$prompt = Read-Host "Avviare la pulizia sicura? (S/N)"
if ($prompt -notin @('S', 's', 'Y', 'y', 'Si', 'si')) { return }
}
$binObjDirs | ForEach-Object { try { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} }
$appPackageDirs | ForEach-Object { try { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} }
if (-not $SkipTemp) { Get-ChildItem -Path [System.IO.Path]::GetTempPath() -Force -ErrorAction SilentlyContinue | ForEach-Object { try { Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } catch {} } }
if (-not $SkipNuget) { try { $null = dotnet nuget locals all --clear 2>&1 } catch {} }
$freeGBAfter = [math]::Round((Get-PSDrive -Name C).Free / 1GB, 2)
$freedTotal = [math]::Round($freeGBAfter - $freeGBBefore, 2)
Write-Host "`nPULIZIA COMPLETATA! Spazio recuperato: +$freedTotal GB" -ForegroundColor Green
Avvio Veloce via Batch (clean-disk-space.bat)
@echo off
setlocal
title Workspace Disk Cleanup
cd /d "%~dp0"
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0_tools\Clean-DevDiskSpace.ps1" %*
pause
4. Risultati dal Campo: Da 1,35 GB a 53,80 GB
- Spazio libero iniziale: 1,35 GB (Allarme rosso)
- Spazio libero finale: 53,80 GB
- Spazio netto recuperato: +52,45 GB in meno di 3 minuti.
Informazioni su Arar Games e i Nostri Giochi
Scopri i nostri titoli indie e segui il nostro studio:
- 🌐 Sito Web Ufficiale: https://www.mayhemcorporation.com
🎮 I Nostri Giochi
- Blocked: Pixel Panzer: Combattimenti tra carri armati arcade retrò con meteo dinamico e boss fight.
Google Play (Android e PC) - PaintTrek: Rompicapi dai colori vivaci e pittura di pixel creativa.
Google Play | Microsoft Store (PC e Xbox) - Space Dodger: Evasione spaziale arcade retrò ad alto ritmo per testare i riflessi.
Google Play
📱 Canali Social Ufficiali
- 🎵 TikTok: https://www.tiktok.com/@arargamesstudio
- 📸 Instagram: https://www.instagram.com/arargamesstudio
- 🐦 X (Twitter): https://x.com/arargamesstudio
- 📺 YouTube: https://www.youtube.com/@koreaaria
- 🧵 Threads: https://www.threads.net/@arargamesstudio
- 📘 Facebook: https://www.facebook.com/arargamesstudio
Hiç yorum yok:
Yorum Gönder