XML资源文件和使用System.Runtime.Caching的ObjectCache进行缓存

时间:2013-02-18 23:03:23

标签: .net xml c#-4.0 caching resources

使用.Net Framework 4.0和C#

我希望缓存xml文件的内容(它有键/值对)。此XML文件作为资源文件是项目的一部分(已将构建操作属性设置为“内容”和“复制到输出目录”,如果更新则为“复制”)。此外,我正在创建缓存策略,以重新加载文件如果文件已经更改,请使用HostFileChangeMonitor。想法是,可以在不删除程序的情况下更新此xml文件。如果xml文件发生更改,则需要清除缓存并从xml文件中重新缓存键值对。

以下是代码段

//code to get the resource file full name with path...
     public static string GetResourceFileFullName(string fileName)
            {
                string path = Assembly.GetExecutingAssembly().Location;
                if (!fileName.StartsWith("\\"))
                    fileName = "\\" + fileName;
                return path + fileName;
            }
    //code to cache an object with File Change Monitor 
 public static void AddToCahce(string key, object objectToCache, string fileNameWithFullPath)
        {
                CacheItemPolicy policy = new CacheItemPolicy();
                List<string> filePaths = new List<string>();
                filePaths.Add(fileNameWithFullPath);
                policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
                MemoryCache.Default.Add(key, objectToCache, policy);
        }

//从xml文件中读取代码并将其置于缓存中,如果没有找到...

Dictionary<string, string> keyValuePair = MemoryCache.Default["keyvalues"];
            if (keyValuePair  == null)
            {
                string xmlFileFullName = GetResourceFileFullName("sample.xml");
                XElement xmlDoc = XDocument.Load(xmlFileFullName).Root;

              keyValuePair = xmlDoc.Descendants("Message")
                             .Select(x => new
                             {
                                 Key = x.Attribute("key").Value,
                                 Value = x.Attribute("value").Value
                             })
                            .ToDictionary(d => d.Key, d => d.Value);

               AddToCahce("keyvalues", keyValuePair , xmlFileFullName )

            }

现在问题是,我使用xml文件的物理位置来读取内容而不是使用资源属性,例如

Properties.Resources.KeyValueXML;

原因,我不想做的就是上面那个,我需要知道xml文件内容何时发生变化,以便可以删除和恢复它。这是正确的方法吗?如果是,那么在这种情况下使用资源文件是否有任何实际价值?请评论。

有没有更好的方法?

注意:如果有帮助,这是我正在实施的类库的一部分。它不是Web或WPF应用程序。

0 个答案:

没有答案