استعادة 50-100 جيجابايت: الدليل الشامل لتنظيف مساحة القرص لمطوري .NET والألعاب وتطبيقات سطح المكتب
يواجه كل مطور برمجيات وألعاب على نظام Windows صباحًا حرجًا في نهاية المطاف: تشغّل جهازك، تفتح بيئة التطوير، وإذ بنظام Windows يعرض تحذيرًا عاجلًا—بقي أقل من 2 جيجابايت من المساحة الفارغة على محرك أقراص SSD بحجم 1 تيرابايت.
لم تقم بتنزيل مقاطع فيديو ضخمة، ولم تثبت ألعابًا جديدة بحجم 100 جيجابايت. إلى أين ذهبت كل هذه المساحة التخزينية؟
بصفتي مطور ألعاب مستقلة وتطبيقات سطح مكتب متعددة المنصات باستخدام .NET 8/9 و MonoGame و Android وحزم MSIX/WAP لمتجر Microsoft، قمت بفحص هذه الأزمة الصامتة. أظهر الفحص الآلي لمجلدات المشاريع أن أكثر من 68 جيجابايت كانت مشغولة بالكامل بنواتج البناء المؤقتة، وحزم المتاجر القديمة، وذاكرة التخزين المؤقت لحزم NuGet.
في هذا الدليل، نوضح الأسباب المعمارية لهذا التضخم، ونبين لماذا يعد حذف هذه المجلدات آمنًا بنسبة 100%، ونشارك نصوص PowerShell و Batch برمجية جاهزة لتفريغ عشرات الجيجابايت بنقرة واحدة.
1. أسباب تضخم مساحة التخزين لدى المطورين
عند بناء حلول برمجية تدعم منصات متعددة، تقوم أدوات البناء بمضاعفة الملفات الثنائية والوسائط في كل مرحلة:
flowchart TD
subgraph "مساحة عمل المشروع"
Code["الكود المصدري (.cs, .xaml, .json)\n(محمي - بضعة ميجابايت)"]
Assets["الوسائط الأصلية (PNG, OGG, Shaders)\n(محمي)"]
Git["سجل .git\n(محمي)"]
BinObj["مجلدات bin و obj\n(ملفات DLL مؤقتة، رموز)\n[30 - 60 GB]"]
AppPackages["WAP / MSIX AppPackages\n(حزم النشر القديمة)\n[5 - 20 GB]"]
end
subgraph "الذاكرة المؤقتة للنظام"
NuGet["%USERPROFILE%\\.nuget\\packages\n(مخزن NuGet المؤقت)\n[10 - 20 GB]"]
Temp["%LOCALAPPDATA%\\Temp\n(ملفات المترجم المؤقتة)\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
السبب الأول: مجلدات bin و obj (30 - 60+ جيجابايت)
obj/(المخرجات الوسيطة): تحتوي على حالات التجميع المتزايدة ونواتج المنصات المؤقتة. بالنسبة لمشاريع Android، يمكن أن يصل حجم هذا المجلد إلى 3-6 جيجابايت لكل مشروع.bin/(المخرجات الثنائية): تحتوي على الملفات التنفيذية وكافة الوسائط المنسوخة عبر<CopyToOutputDirectory>. إذا كانت 10 مشاريع تشير إلى مجلد وسائط مشترك بحجم 500 ميجابايت، يتم تكرار نسخه 10 مرات (إهدار 5 جيجابايت في حل واحد).
السبب الثاني: مجلدات AppPackages لمتجر Microsoft (5 - 20+ جيجابايت)
عند إنشاء حزم للمتجر، ينشئ Visual Studio ملفات .msixbundle و .msixupload كاملة مع رموز PDB. ولا يقوم أبدًا بحذف الإصدارات القديمة تلقائيًا.
السبب الثالث: ذاكرة NuGet المؤقتة العامة (10 - 20+ جيجابايت)
في المسار %USERPROFILE%\.nuget\packages، يتم الاحتفاظ بكل إصدار من كل حزمة تم تنزيلها على جهازك على الإطلاق.
السبب الرابع: ملفات Windows المؤقتة (Temp) (3 - 10 جيجابايت)
آلاف الملفات المؤقتة التي تتركها أدوات التجميع والضغط في المسار %LOCALAPPDATA%\Temp.
2. ضمان الأمان: لماذا العملية خالية من المخاطر بنسبة 100%؟
| ملفات محمية (لا تُمس أبدًا) | ملفات يمكن حذفها بأمان (تُعاد صياغتها بالكامل) |
|---|---|
الكود المصدري: .cs, .xaml, .cpp, .json |
ملفات الكائنات المؤقتة للمترجم (obj/) |
تعريفات المشاريع: .sln, .csproj, .wapproj |
الملفات الثنائية ومكتبات DLL المجمعة (bin/) |
مستودعات Git: مجلد .git/ والفروع والالتزامات |
حزم إصدارات المتجر السابقة (AppPackages/) |
| الوسائط الأصلية: الصور والأصوات والمجسمات | حزم NuGet المخزنة محليًا (.nuget\packages) |
الشهادات: .pfx, StoreAssociation.xml |
ملفات النظام المؤقتة (%LOCALAPPDATA%\Temp) |
ماذا يحدث عند إعادة فتح Visual Studio؟
بمجرد فتح الحل والضغط على Build أو Rebuild، يعيد Visual Studio و .NET SDK إنشاء مجلداتbinوobjفورًا من الكود المصدري. لا تفقد أي سطر كود أو إعدادات.
3. الحل البرمجي التلقائي: نصوص التنظيف
محرك PowerShell للتنظيف (Clean-DevDiskSpace.ps1)
<#
.SYNOPSIS
أداة تنظيف مساحة القرص للمطورين
#>
[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 "خطأ أمان: تم الكشف عن مسار الجذر!" -ForegroundColor Red
exit 1
}
$systemDrive = Get-PSDrive -Name C
$freeGBBefore = [math]::Round($systemDrive.Free / 1GB, 2)
Write-Host "المساحة الفارغة قبل التنظيف: $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 "اكتمل الفحص." -ForegroundColor Yellow; return }
if (-not $Force) {
$prompt = Read-Host "هل تريد بدء التنظيف الآمن؟ (Y/N)"
if ($prompt -notin @('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 "`nاكتمل التنظيف! المساحة المستعادة: +$freedTotal GB" -ForegroundColor Green
ملف التشغيل المباشر (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. نتائج الاختبار الميداني: من 1.35 إلى 53.80 جيجابايت
- المساحة الفارغة قبل التنظيف: 1.35 جيجابايت (تحذير أحمر)
- المساحة الفارغة بعد التنظيف: 53.80 جيجابايت
- صافي المساحة المستعادة: +52.45 جيجابايت في أقل من 3 دقائق.
نبذة عن Arar Games وألعابنا
اكتشف ألعابنا المستقلة وتواصل مع الاستوديو:
- 🌐 الموقع الرسمي: https://www.mayhemcorporation.com
🎮 ألعابنا
- Blocked: Pixel Panzer: معارك دبابات آركيد كلاسيكية مع طقس ديناميكي ومواجهات زعماء ملحمية.
Google Play (Android و PC) - PaintTrek: ألغاز ألوان نابضة بالحياة وحركة تلوين بكسل إبداعية.
Google Play | Microsoft Store (PC و Xbox) - Space Dodger: لعبة تفادي عقبات فضائية سريعة الوتيرة لاختبار ردود الفعل.
Google Play
📱 قنوات التواصل الاجتماعي الرسمية
- 🎵 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