นี่คือแอพเล็ก ๆ ที่ใช้การสุ่มตัวอย่างแบบลึกเพื่อค้นหาเนื้องอกในดิสก์หรือไดเรกทอรีใด ๆ มันเดินแผนผังไดเรกทอรีสองครั้งหนึ่งครั้งเพื่อวัดและครั้งที่สองเพื่อพิมพ์เส้นทางถึง 20 ไบต์ "สุ่ม" ภายใต้ไดเรกทอรี
void walk(string sDir, int iPass, int64& n, int64& n1, int64 step){
foreach(string sSubDir in sDir){
walk(sDir + "/" + sSubDir, iPass, n, n1, step);
}
foreach(string sFile in sDir){
string sPath = sDir + "/" + sFile;
int64 len = File.Size(sPath);
if (iPass == 2){
while(n1 <= n+len){
print sPath;
n1 += step;
}
}
n += len;
}
}
void dscan(){
int64 n = 0, n1 = 0, step = 0;
// pass 1, measure
walk(".", 1, n, n1);
print n;
// pass 2, print
step = n/20; n1 = step/2; n = 0;
walk(".", 2, n, n1);
print n;
}
ผลลัพธ์มีลักษณะเช่นนี้สำหรับไดเรกทอรี Program Files ของฉัน:
7,908,634,694
.\ArcSoft\PhotoStudio 2000\Samples\3.jpg
.\Common Files\Java\Update\Base Images\j2re1.4.2-b28\core1.zip
.\Common Files\Wise Installation Wizard\WISDED53B0BB67C4244AE6AD6FD3C28D1EF_7_0_2_7.MSI
.\Insightful\splus62\java\jre\lib\jaws.jar
.\Intel\Compiler\Fortran\9.1\em64t\bin\tselect.exe
.\Intel\Download\IntelFortranProCompiler91\Compiler\Itanium\Data1.cab
.\Intel\MKL\8.0.1\em64t\bin\mkl_lapack32.dll
.\Java\jre1.6.0\bin\client\classes.jsa
.\Microsoft SQL Server\90\Setup Bootstrap\sqlsval.dll
.\Microsoft Visual Studio\DF98\DOC\TAPI.CHM
.\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\Windows CE\sqlce20sql2ksp1.exe
.\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\docs\Partition II Metadata.doc
.\Microsoft Visual Studio .NET 2003\Visual Studio .NET Enterprise Architect 2003 - English\Logs\VSMsiLog0A34.txt
.\Microsoft Visual Studio 8\Microsoft Visual Studio 2005 Professional Edition - ENU\Logs\VSMsiLog1A9E.txt
.\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wce500\mipsiv\NETCFv2.wce5.mipsiv.cab
.\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i\UafxcW.lib
.\Microsoft Visual Studio 8\VC\ce\Dll\mipsii\mfc80ud.pdb
.\Movie Maker\MUI\0409\moviemk.chm
.\TheCompany\TheProduct\docs\TheProduct User's Guide.pdf
.\VNI\CTT6.0\help\StatV1.pdf
7,908,634,694
มันบอกฉันว่าไดเรกทอรีเป็น 7.9gb ซึ่ง
- ~ 15% จะเข้าสู่คอมไพเลอร์ Intel Fortran
- ~ 15% ไปที่ VS .NET 2003
- ~ 20% ไปที่ VS 8
มันง่ายพอที่จะถามว่าสิ่งเหล่านี้สามารถยกเลิกการโหลด
นอกจากนี้ยังบอกเกี่ยวกับประเภทไฟล์ที่กระจายไปทั่วระบบไฟล์ แต่การรวมกันเป็นตัวแทนของโอกาสในการประหยัดพื้นที่:
- ประมาณ 15% ไปที่ไฟล์. cab และ. MSI
- ประมาณ 10% ไปที่การบันทึกไฟล์ข้อความ
มันแสดงให้เห็นสิ่งอื่น ๆ อีกมากมายในนั้นเช่นกันซึ่งฉันอาจจะทำได้โดยไม่ต้องเช่น "SmartDevices" และ "ce" สนับสนุน (~ 15%)
ใช้เวลาเชิงเส้น แต่ไม่ต้องทำบ่อย
ตัวอย่างของสิ่งที่พบ:
- สำเนาสำรองของ DLLs ในที่เก็บรหัสที่บันทึกไว้จำนวนมากซึ่งไม่จำเป็นต้องถูกบันทึกจริงๆ
- สำเนาสำรองของฮาร์ดไดรฟ์ของใครบางคนบนเซิร์ฟเวอร์ภายใต้ไดเรกทอรีคลุมเครือ
- ไฟล์อินเทอร์เน็ตชั่วคราวขนาดใหญ่
- doc โบราณและไฟล์ช่วยเหลือที่ผ่านมาเป็นสิ่งจำเป็น