{"id":111,"date":"2011-06-16T17:39:00","date_gmt":"2011-06-16T17:39:00","guid":{"rendered":"http:\/\/madprogrammer76.wordpress.com\/2011\/06\/16\/caching-locally"},"modified":"2011-06-16T17:39:00","modified_gmt":"2011-06-16T17:39:00","slug":"caching-locally","status":"publish","type":"post","link":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/","title":{"rendered":"Caching Locally"},"content":{"rendered":"<p>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&#8217;s local system.   Based on the user&#8217;s habits, it will cache what the user uses commonly.<\/p>\n<p>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.<\/p>\n<p>At the end of the day, this is one example only of what could be done.<\/p>\n<p><b>Class Example<\/b>    <\/p>\n<pre style=\"color:#0033ff;background-color:#dddddd;border:1px;font-size:8pt;\">public class CurrencyCodes<br \/>        private static CurrencyCodes _instance;                     \/\/ Instance Of Self<br \/><br \/>        private static DataTable dt = new DataTable(\"CurrencyCodes\");<br \/><br \/>        public static CurrencyCodes Instance<br \/>        {<br \/>            get<br \/>            {<br \/>                if (_instance == null)<br \/>                {<br \/>                    _instance = new CurrencyCodes();<br \/>                }<br \/>                return _instance;<br \/>            }<br \/>        }<br \/><br \/>        private CurrencyCodes()<br \/>        {<br \/>            dt.Columns.Add(\"CurrencyCode\", typeof(String));<br \/>            dt.Columns.Add(\"LastUpdated\", typeof(DateTime));<br \/>        }<br \/><br \/>        public String Search(String value)<br \/>        {<br \/>            DataRow[] rows = dt.Select(\"CurrencyCode='\" + value + \"'\");<br \/>            if (rows.Count() == 1) return value;<br \/>            return \"\";<br \/>        }<br \/><br \/>        public void Add(String value)<br \/>        {<br \/>            DataRow row = dt.NewRow();<br \/>            row[\"CurrencyCode\"] = value;<br \/>            row[\"LastUpdated\"] = DateTime.Now;<br \/>            dt.Rows.Add(row);<br \/>        }<br \/><br \/>        public void ClearCache()<br \/>        {<br \/>            dt.Rows.Clear();<br \/>        }<br \/><br \/>        public void LoadCache(String xml)<br \/>        {<br \/>            StringReader theReader = new StringReader(xml);<br \/>            dt.ReadXml(theReader);<br \/>        }<br \/><br \/>        public String SaveCache()<br \/>        {<br \/>            using (MemoryStream ms = new MemoryStream())<br \/>            {<br \/>                dt.WriteXml(ms);<br \/>                ms.Position = 0;<br \/><br \/>                StreamReader sr = new StreamReader(ms, System.Text.Encoding.UTF8);<br \/><br \/>                return sr.ReadToEnd();<br \/>            }<br \/>        }<br \/>    }<br \/><\/pre>\n<p><b>Calling the class<\/b><\/p>\n<pre style=\"color:#0033ff;background-color:#dddddd;border:1px;font-size:8pt;\">Directory.SetCurrentDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));<br \/>            if (!Directory.Exists(\"YourSoftwareCache\"))<br \/>            {<br \/>                Directory.CreateDirectory(\"YourSoftwareCache\");<br \/>            }<br \/><br \/>            if (File.Exists(\"CurrencyCodes.XML\")) <br \/>               CurrencyCodes.Instance.LoadCache(File.ReadAllText(\"CurrencyCodes.XML\"));<br \/><br \/>            CachedCurrencyCodes cachedCurrencyCodes = CachedCurrencyCodes.Instance;<br \/>            CurrencyCode = cachedCurrencyCodes.Search(Criteria);<br \/><br \/><\/pre>\n<p><b>Note<\/b> Comments have been stripped to clean up the posting.   Always Comment Your Code.<\/p>\n<div class=\"blogger-post-footer\"><img width='1' height='1' src='' alt='' \/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>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&#8217;s local system. Based on the user&#8217;s habits, it will cache &hellip; <a href=\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Caching Locally<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,15],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Caching Locally - LDNDeveloper<\/title>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Caching Locally - LDNDeveloper\" \/>\r\n<meta property=\"og:description\" content=\"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&#8217;s local system. Based on the user&#8217;s habits, it will cache &hellip; Continue reading Caching Locally\" \/>\r\n<meta property=\"og:url\" content=\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\" \/>\r\n<meta property=\"og:site_name\" content=\"LDNDeveloper\" \/>\r\n<meta property=\"article:published_time\" content=\"2011-06-16T17:39:00+00:00\" \/>\r\n<meta name=\"author\" content=\"andrewpallant\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@ldnDeveloper\" \/>\r\n<meta name=\"twitter:site\" content=\"@LdnDeveloper\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"andrewpallant\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\"},\"author\":{\"name\":\"andrewpallant\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/0e7b5e71751000e8f66b17b69ef4ab97\"},\"headline\":\"Caching Locally\",\"datePublished\":\"2011-06-16T17:39:00+00:00\",\"dateModified\":\"2011-06-16T17:39:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\"},\"wordCount\":152,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/f6f5bb1ac3e0c5a54a8b5ce35fd67b84\"},\"articleSection\":[\"C#\",\"Caching\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\",\"url\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\",\"name\":\"Caching Locally - LDNDeveloper\",\"isPartOf\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#website\"},\"datePublished\":\"2011-06-16T17:39:00+00:00\",\"dateModified\":\"2011-06-16T17:39:00+00:00\",\"breadcrumb\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/andrewpallant.ca\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Caching Locally\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#website\",\"url\":\"http:\/\/andrewpallant.ca\/wordpress\/\",\"name\":\"LDNDeveloper\",\"description\":\"Learning, Growing and Sharing.\",\"publisher\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/f6f5bb1ac3e0c5a54a8b5ce35fd67b84\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/andrewpallant.ca\/wordpress\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/f6f5bb1ac3e0c5a54a8b5ce35fd67b84\",\"name\":\"ldnDeveloper\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/andrewpallant.ca\/wordpress\/wp-content\/uploads\/2017\/05\/cropped-AAEAAQAAAAAAAAXQAAAAJDQxMGRlMzFjLWM4ODctNDk1NC05M2EyLWE1NDNhNTRiZjVlYw-2.jpg\",\"contentUrl\":\"https:\/\/andrewpallant.ca\/wordpress\/wp-content\/uploads\/2017\/05\/cropped-AAEAAQAAAAAAAAXQAAAAJDQxMGRlMzFjLWM4ODctNDk1NC05M2EyLWE1NDNhNTRiZjVlYw-2.jpg\",\"width\":512,\"height\":512,\"caption\":\"ldnDeveloper\"},\"logo\":{\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/image\/\"},\"description\":\"Andrew Pallant (@LdnDeveloper) has been a web, database and desktop developer for over 16 years. Andrew has worked on projects that ranged from factory automation to writing business applications. Most recently he has been heavily involved in various forms for ecommerce projects. Over the years Andrew has worn many hats: Project Manager, IT Manager, Lead Developer, Supervisor of Developers and many more - See more at: http:\/\/www.unlatched.com\/#sthash.8DiTkpKy.dpuf\",\"sameAs\":[\"http:\/\/www.andrewpallant.ca\",\"https:\/\/x.com\/LdnDeveloper\"]},{\"@type\":\"Person\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/0e7b5e71751000e8f66b17b69ef4ab97\",\"name\":\"andrewpallant\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"caption\":\"andrewpallant\"},\"url\":\"http:\/\/andrewpallant.ca\/wordpress\/author\/andrewpallant\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Caching Locally - LDNDeveloper","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/","og_locale":"en_US","og_type":"article","og_title":"Caching Locally - LDNDeveloper","og_description":"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&#8217;s local system. Based on the user&#8217;s habits, it will cache &hellip; Continue reading Caching Locally","og_url":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/","og_site_name":"LDNDeveloper","article_published_time":"2011-06-16T17:39:00+00:00","author":"andrewpallant","twitter_card":"summary_large_image","twitter_creator":"@ldnDeveloper","twitter_site":"@LdnDeveloper","twitter_misc":{"Written by":"andrewpallant","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#article","isPartOf":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/"},"author":{"name":"andrewpallant","@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/0e7b5e71751000e8f66b17b69ef4ab97"},"headline":"Caching Locally","datePublished":"2011-06-16T17:39:00+00:00","dateModified":"2011-06-16T17:39:00+00:00","mainEntityOfPage":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/"},"wordCount":152,"commentCount":0,"publisher":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/f6f5bb1ac3e0c5a54a8b5ce35fd67b84"},"articleSection":["C#","Caching"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/","url":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/","name":"Caching Locally - LDNDeveloper","isPartOf":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/#website"},"datePublished":"2011-06-16T17:39:00+00:00","dateModified":"2011-06-16T17:39:00+00:00","breadcrumb":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/andrewpallant.ca\/wordpress\/caching-locally\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/andrewpallant.ca\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Caching Locally"}]},{"@type":"WebSite","@id":"http:\/\/andrewpallant.ca\/wordpress\/#website","url":"http:\/\/andrewpallant.ca\/wordpress\/","name":"LDNDeveloper","description":"Learning, Growing and Sharing.","publisher":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/f6f5bb1ac3e0c5a54a8b5ce35fd67b84"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/andrewpallant.ca\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/f6f5bb1ac3e0c5a54a8b5ce35fd67b84","name":"ldnDeveloper","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/andrewpallant.ca\/wordpress\/wp-content\/uploads\/2017\/05\/cropped-AAEAAQAAAAAAAAXQAAAAJDQxMGRlMzFjLWM4ODctNDk1NC05M2EyLWE1NDNhNTRiZjVlYw-2.jpg","contentUrl":"https:\/\/andrewpallant.ca\/wordpress\/wp-content\/uploads\/2017\/05\/cropped-AAEAAQAAAAAAAAXQAAAAJDQxMGRlMzFjLWM4ODctNDk1NC05M2EyLWE1NDNhNTRiZjVlYw-2.jpg","width":512,"height":512,"caption":"ldnDeveloper"},"logo":{"@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/image\/"},"description":"Andrew Pallant (@LdnDeveloper) has been a web, database and desktop developer for over 16 years. Andrew has worked on projects that ranged from factory automation to writing business applications. Most recently he has been heavily involved in various forms for ecommerce projects. Over the years Andrew has worn many hats: Project Manager, IT Manager, Lead Developer, Supervisor of Developers and many more - See more at: http:\/\/www.unlatched.com\/#sthash.8DiTkpKy.dpuf","sameAs":["http:\/\/www.andrewpallant.ca","https:\/\/x.com\/LdnDeveloper"]},{"@type":"Person","@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/0e7b5e71751000e8f66b17b69ef4ab97","name":"andrewpallant","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/andrewpallant.ca\/wordpress\/#\/schema\/person\/image\/","url":"http:\/\/2.gravatar.com\/avatar\/?s=96&d=mm&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/?s=96&d=mm&r=g","caption":"andrewpallant"},"url":"http:\/\/andrewpallant.ca\/wordpress\/author\/andrewpallant\/"}]}},"_links":{"self":[{"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/posts\/111"}],"collection":[{"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":0,"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/posts\/111\/revisions"}],"wp:attachment":[{"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/media?parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/categories?post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/andrewpallant.ca\/wordpress\/wp-json\/wp\/v2\/tags?post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}