Hier ist eine winzige App, die mithilfe von Deep Sampling nach Tumoren auf einer Festplatte oder in einem Verzeichnis sucht. Der Verzeichnisbaum wird zweimal durchlaufen, einmal, um ihn zu messen, und das zweite Mal, um die Pfade zu 20 "zufälligen" Bytes unter dem Verzeichnis auszudrucken.
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;
}
Die Ausgabe für mein Programmverzeichnis sieht folgendermaßen aus:
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
Es sagt mir, dass das Verzeichnis 7,9 GB ist, von denen
- ~ 15% gehen an den Intel Fortran Compiler
- ~ 15% gehen an VS .NET 2003
- ~ 20% gehen an VS 8
Es ist einfach genug zu fragen, ob eines davon entladen werden kann.
Außerdem werden Dateitypen beschrieben, die über das Dateisystem verteilt sind, zusammengenommen jedoch eine Möglichkeit zur Platzersparnis darstellen:
- ~ 15% gehen ungefähr in CAB- und MSI-Dateien
- ~ 10% werden ungefähr für die Protokollierung von Textdateien verwendet
Es zeigt auch viele andere Dinge, auf die ich wahrscheinlich verzichten könnte, wie die Unterstützung von "SmartDevices" und "ce" (~ 15%).
Es dauert zwar linear, muss aber nicht oft durchgeführt werden.
Beispiele für Dinge, die es gefunden hat:
- Sicherungskopien von DLLs in vielen gespeicherten Code-Repositorys, die nicht wirklich gespeichert werden müssen
- Eine Sicherungskopie der Festplatte einer anderen Person auf dem Server in einem undurchsichtigen Verzeichnis
- umfangreiche temporäre Internetdateien
- alte Doc- und Hilfedateien, die längst nicht mehr benötigt wurden