Caching Locally
Published: Jun 16, 2011 17:39:00
Physical Link: Caching Locally
One of the applications I have been working recently is a windows based application.  Most things that the user keys into the system results in a database hit validation.   To cut back on this I have implemented classes that assist in caching to the user’s local system.   Based on the user’s habits, it will cache what the user uses commonly.
I am using a datatable in this example, but you could use a dictionary object.  Should you choose to use a dictionary object, you could use LINQ to query the object.  You could also make the caching class an extension which could cut down on some code an make it a little cleaner.
At the end of the day, this is one example only of what could be done.
Class Example    
public class CurrencyCodes
        private static CurrencyCodes _instance;                     // Instance Of Self
        private static DataTable dt = new DataTable("CurrencyCodes");
        public static CurrencyCodes Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new CurrencyCodes();
                }
                return _instance;
            }
        }
        private CurrencyCodes()
        {
            dt.Columns.Add("CurrencyCode", typeof(String));
            dt.Columns.Add("LastUpdated", typeof(DateTime));
        }
        public String Search(String value)
        {
            DataRow[] rows = dt.Select("CurrencyCode='" + value + "'");
            if (rows.Count() == 1) return value;
            return "";
        }
        public void Add(String value)
        {
            DataRow row = dt.NewRow();
            row["CurrencyCode"] = value;
            row["LastUpdated"] = DateTime.Now;
            dt.Rows.Add(row);
        }
        public void ClearCache()
        {
            dt.Rows.Clear();
        }
        public void LoadCache(String xml)
        {
            StringReader theReader = new StringReader(xml);
            dt.ReadXml(theReader);
        }
        public String SaveCache()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                dt.WriteXml(ms);
                ms.Position = 0;
                StreamReader sr = new StreamReader(ms, System.Text.Encoding.UTF8);
                return sr.ReadToEnd();
            }
        }
    }
Calling the class
Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
            if (!Directory.Exists("YourSoftwareCache"))
            {
                Directory.CreateDirectory("YourSoftwareCache");
            }
            if (File.Exists("CurrencyCodes.XML")) 
               CurrencyCodes.Instance.LoadCache(File.ReadAllText("CurrencyCodes.XML"));
            CachedCurrencyCodes cachedCurrencyCodes = CachedCurrencyCodes.Instance;
            CurrencyCode = cachedCurrencyCodes.Search(Criteria);
Note Comments have been stripped to clean up the posting.   Always Comment Your Code.
The post Caching Locally appeared first on LDNDeveloper.
Author: Andrew PallantCategories: C#, Caching