The file cache provider allows you to save long running results to the file system. The object is first binary serialized and then saved to a file. Objects do not need to be marked as Serializable to be saved but they do need to have a default empty constructor. A separate CacheInfo file is saved which contains the key, region, and expiration information. The filename is based on a hash of the key. By default, expired items are removed from the cache every minute. If the cache is over the MaxMegabytes or MaxCacheItems items will be removed oldest first until the cache is 75% of the MaxMegabytes and MaxCacheItems.
Example output files:
CacheInfo8619998834579835952.bin
Value8619998834579835952.bin
Defaults for the file cache provider
Recommended options for optimal performance
Example
public class FileCacheExample
{
public void FileCacheExampleUsage()
{
//Build parameters for the report
Dictionary<string, object> parms = new Dictionary<string, object>();
parms.Add("Month", DateTime.Now.Month);
parms.Add("Year", DateTime.Now.Year);
//Get the cache key based on the report parameters
string cacheKey = Cache.Instance.BuildCacheKey("MonthlySalesReport", parms);
//Get the report from the cache, if it does not exist, call the ReportLogic.MonthlySalesReport, save it to the cache and return it
List<ReportDetail> result = Cache.Instance.Get<List<ReportDetail>>(cacheKey, NetCachingLibraryTest.ReportLogic.MonthlySalesReport, parms);
}
}
public static class Cache
{
private static SmartCache _smartCache;
public static FileCacheProvider SecondaryCache { get; set; }
private static void Setup()
{
string cacheDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"KellermanSoftware",
"NetCachingLibrary",
"FileCacheExample");
SecondaryCache = new FileCacheProvider(cacheDirectory);
SecondaryCache.MaxCacheItems = 400;
SmartConfig config = new SmartConfig(new MemoryCacheProvider(), SecondaryCache);
//Specify UserName and LicenseKey for Licensed Mode
//config.UserName = "my user name";
//config.LicenseKey = "my license key";
_smartCache = new SmartCache(config);
}
public static SmartCache Instance
{
get
{
if (_smartCache == null)
Setup();
return _smartCache;
}
}
}
public static class ReportLogic
{
//Example long running report
public static List<ReportDetail> MonthlySalesReport(Dictionary<string, object> parms)
{
System.Threading.Thread.Sleep(1000);
List<ReportDetail> list = new List<ReportDetail>();
list.Add(new ReportDetail("Midwest", 233457.47m));
list.Add(new ReportDetail("Southern", 234789.88m));
return list;
}
}