27 Ekim 2026 Salı

Odzyskaj 50-100 GB: Kompletny przewodnik po czyszczeniu dysku dla programistów .NET, gier i aplikacji desktopowych




Odzyskaj 50-100 GB: Kompletny przewodnik po czyszczeniu dysku dla programistów .NET, gier i aplikacji desktopowych

Każdy programista pracujący w systemie Windows prędzej czy później spotyka się z tym samym problemem: uruchamiasz komputer, włączasz środowisko programistyczne i nagle Windows informuje, że na dysku SSD NVMe o pojemności 1 TB zostało mniej niż 2 GB wolnego miejsca.

Nie pobierałeś filmów w 4K ani nie instalowałeś nowych gier o wadze 100 GB. Gdzie podziała się cała przestrzeń?

Jako niezależny twórca gier i aplikacji desktopowych pracujący z .NET 8/9, MonoGame, Androidem oraz Windows Application Packaging (MSIX/WAP dla Microsoft Store) postanowiłem to zbadać. Automatyczne skanowanie repozytoriów projektowych wykazało, że ponad 68 GB zajmowały tymczasowe pliki kompilacji, archiwa starych pakietów instalacyjnych oraz globalna pamięć podręczna NuGet.

W tym przewodniku wyjaśniamy, dlaczego środowiska deweloperskie pochłaniają tak ogromne ilości pamięci, dlaczego usuwanie tych folderów jest w 100% bezpieczne, oraz udostępniamy gotowe skrypty PowerShell i Batch do natychmiastowego zwolnienia dziesiątek gigabajtów.


1. Skąd bierze się zapełnienie dysku programisty?

Podczas kompilacji rozwiązań wieloplatformowych narzędzia deweloperskie duplikują biblioteki i zasoby na każdym etapie:

flowchart TD
    subgraph "Przestrzeń robocza projektów"
        Code["Kod źródłowy (.cs, .xaml, .json)\n(Chroniony - Kilka MB)"]
        Assets["Oryginalne zasoby (PNG, OGG, Shaders)\n(Chronione)"]
        Git["Historia .git\n(Chroniona)"]
        
        BinObj["Foldery bin i obj\n(Pośrednie DLL, symbole, kopie)\n[30 - 60 GB]"]
        AppPackages["WAP / MSIX AppPackages\n(Stare pakiety sklepu)\n[5 - 20 GB]"]
    end

    subgraph "Pamięci podręczne systemu"
        NuGet["%USERPROFILE%\\.nuget\\packages\n(Globalny cache NuGet)\n[10 - 20 GB]"]
        Temp["%LOCALAPPDATA%\\Temp\n(Tymczasowe pliki kompilatora)\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

Przyczyna A: Foldery bin i obj (30 - 60+ GB)

  • obj/ (Wyniki pośrednie): Przechowuje stany kompilacji przyrostowej. Dla projektów Android folder ten potrafi osiągnąć 3 do 6 GB na jeden projekt.
  • bin/ (Pliki binarne): Zawiera gotowe pliki wykonywalne i zasoby powielone za pomocą <CopyToOutputDirectory>. Jeśli 10 projektów odwołuje się do wspólnego folderu z zawartością gry o wielkości 500 MB, dane te są powielane 10 razy (5 GB niepotrzebnie zajętego miejsca).

Przyczyna B: Foldery AppPackages ze sklepu Microsoft Store (5 - 20+ GB)

Podczas generowania paczek instalacyjnych Visual Studio tworzy pliki .msixbundle oraz .msixupload (z pełnymi symbolami PDB). Środowisko nigdy automatycznie nie kasuje starszych wersji.

Przyczyna C: Globalny cache NuGet (10 - 20+ GB)

W %USERPROFILE%\.nuget\packages przechowywana jest każda wersja każdej biblioteki kiedykolwiek pobranej na Twoim komputerze.

Przyczyna D: Pliki tymczasowe Windows (Temp) (3 - 10 GB)

W katalogu %LOCALAPPDATA%\Temp kompilatory i instalatory pozostawiają tysiące porzuconych plików roboczych.


2. Gwarancja bezpieczeństwa: Dlaczego to w 100% bezpieczne?

Chronione (NIGDY nieusuwane) Bezpieczne do usunięcia (100% odtwarzalne)
Kod źródłowy: .cs, .xaml, .cpp, .json Pliki obiektowe kompilatora (obj/)
Definicje projektów: .sln, .csproj, .wapproj Skompilowane pliki wykonywalne i DLL (bin/)
Repozytoria Git: Folder .git/, gałęzie i commity Stare pakiety wydań sklepowych (AppPackages/)
Oryginalne zasoby: Grafiki, dźwięki, shadery Pobrane pakiety NuGet (.nuget\packages)
Certyfikaty: .pfx, StoreAssociation.xml Pliki tymczasowe systemu (%LOCALAPPDATA%\Temp)

Co się stanie po ponownym otwarciu Visual Studio?
Wystarczy otworzyć projekt i kliknąć Kompiluj (Build) lub Przebuduj (Rebuild). Narzędzia SDK i kompilator automatycznie odtworzą strukturę folderów bin i obj z Twojego kodu źródłowego. Żadne dane ani ustawienia nie zostaną utracone.


3. Zautomatyzowane rozwiązanie: Skrypt czyszczący

Silnik PowerShell (Clean-DevDiskSpace.ps1)

Zapisz skrypt w _tools/Clean-DevDiskSpace.ps1 w katalogu swoich projektów:

<#
.SYNOPSIS
    Narzędzie do czyszczenia dysku dla programistów
#>
[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 "BLOKADA BEZPIECZEŃSTWA: Wykryto ścieżkę główną dysku!" -ForegroundColor Red
    exit 1
}

$systemDrive = Get-PSDrive -Name C
$freeGBBefore = [math]::Round($systemDrive.Free / 1GB, 2)
Write-Host "Wolne miejsce na dysku C przed czyszczeniem: $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 "Skanowanie zakończone." -ForegroundColor Yellow; return }
if (-not $Force) {
    $prompt = Read-Host "Czy chcesz rozpocząć bezpieczne czyszczenie? (T/N)"
    if ($prompt -notin @('T', 't', 'Y', 'y')) { 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 "`nCZYSZCZENIE ZAKOŃCZONE! Odzyskano: +$freedTotal GB" -ForegroundColor Green

Plik wsadowy (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. Rzeczywiste wyniki testów

  • Wolne miejsce przed czyszczeniem: 1,35 GB (Stan krytyczny)
  • Wolne miejsce po czyszczeniu: 53,80 GB
  • Odzyskana przestrzeń: +52,45 GB w mniej niż 3 minuty.

O Arar Games i naszych grach

Odkryj nasze gry niezależne i śledź nasze studio:

🎮 Nasze gry

📱 Oficjalne media społecznościowe




Hiç yorum yok:

Yorum Gönder