```csharp title="disk_cache.cs" using Kreuzberg; using System; using System.IO; using System.Threading.Tasks; var config = new ExtractionConfig { UseCache = true, CacheConfig = new CacheConfig { CachePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "kreuzberg_cache"), MaxCacheSize = 1024 * 1024 * 500, CacheTtlSeconds = 86400 * 7, EnableCompression = true } }; Console.WriteLine("First extraction (will be cached)..."); var result1 = await KreuzbergLib.ExtractFileAsync("document.pdf", config); Console.WriteLine($" - Content length: {result1.Content.Length}"); Console.WriteLine($" - Cached: {result1.Metadata.WasCached}"); Console.WriteLine("\nSecond extraction (from cache)..."); var result2 = await KreuzbergLib.ExtractFileAsync("document.pdf", config); Console.WriteLine($" - Content length: {result2.Content.Length}"); Console.WriteLine($" - Cached: {result2.Metadata.WasCached}"); Console.WriteLine($"\nResults are identical: {result1.Content == result2.Content}"); await KreuzbergLib.ClearCacheAsync("document.pdf"); Console.WriteLine("\nCache cleared for document.pdf"); await KreuzbergLib.ClearAllCacheAsync(); Console.WriteLine("All cache cleared"); var cacheStats = await KreuzbergLib.GetCacheStatsAsync(); Console.WriteLine($"\nCache Statistics:"); Console.WriteLine($" - Total entries: {cacheStats.TotalEntries}"); Console.WriteLine($" - Cache size: {cacheStats.CacheSizeBytes / 1024 / 1024} MB"); Console.WriteLine($" - Hit rate: {cacheStats.HitRate:P}"); ```