c# – 优化/读取/写入共享resoruce的最佳方式
我需要的一个是管理共享资源(更像是一个日志,同时具有读写操作)
在应用程序中的不同进程(因此也是多个线程)之间.数据也应该是 持续系统重启,因此它应该是一个物理文件/数据库. 共享资源是一些具有密钥值信息的数据. 更新/删除现有的键值信息). 因此,我正在考虑使用xml文件物理存储信息,样本内容将 看起来像, <Root> <Key1>Value</Key1> <Key2>Value</Key2> <Key3>Value</Key3> </Root> 执行读取和操作的界面将如下所示, public interface IDataHandler { IDictionary<string,string> GetData(); void SetData(string key,string value); } 我可以假设数据不会超过500 MB因此xml决定以及数据是否增长 与上述场景相关的查询/设计考虑很少, 可以在xml文件中处理500 MB的数据吗? 假设文件为xml,现在如何处理性能考虑? >我正在考虑将数据缓存(.Net中的MemoryCache类)作为字典,这将启用 为了在读取操作期间实现性能,可以在内存中缓存500 MB的数据,还是我们 还有其他选择吗? >现在,如果我使用上面的缓存机制,在写操作期间应该发生什么: 整个字典到xml?要么 处理这种情况的其他方法? 线程读取队列并启用实际的写操作,以便实际写入数据的人 因为写入文件会不会受到影响? 更好的方法吗? 我确信,我操作的假设很少,并试图从那里建造,如果我错了 某些假设会改变大部分设计概念.因此,全新的解决方案也是 欢迎(保持表现为主要标准). 解决方法
正如你所说的“写操作不仅仅是读取”我假设数据增长得更快,所以我的建议是开始设计数据库.它不需要像MSSQL或MYSQL这样的完整功能数据库,您可以从SQL-Lite或MSSQL-Compact开始.这使您的应用程序成为大数据处理能力的未来证明.
存储大量读取数据(如在RAM中变化不大的配置)是有效的方法.我的建议是使用一些缓存管理器,如MemoryCache或Enterprise Library Caching Block,这样可以节省大量时间实现线程安全数据访问和噩梦:)而不是编写自己的. public interface IDataHandler { IDictionary<string,string> GetData(); void SetData(string key,string value); } public class MyDataHandler : IDataHandler { public IDictionary<string,string> GetData() { return CacheManager.GetData("ConfigcacheKey") as IDictionary<string,string>; } public void SetData(string key,string value) { var data = GetData() ?? new Dictionary<string,string(); if(data.ContainsKey(key)) data[key] = value; else data.Add(key,value); CacheManager.Add("ConfigcacheKey",data); // HERE write an async method to save the key,value in database or XML file } } 如果你使用XML,那么每次都不需要将字典转换为xml.在XmlDocument / XDocument对象中加载XML文档,并使用XPath查找要更新值的元素,或添加新元素并保存文档. 从性能点来看,除非你做一些疯狂的逻辑或处理GB中的巨大(我的意思是非常巨大的)数据,我建议你使用已经可用的经过测试的组件(如数据库,CacheManagers)快速完成你的应用程序,它将你从线程安全操作中抽象出来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |