srs*_*esh 6 c# optimization performance file-io multithreading
我需要的一个是管理共享资源(更像是一个日志,同时具有读写操作)
在应用程序中的不同进程(因此也是多个线程)之间.数据也应该是
持续系统重启,因此它应该是一个物理文件/数据库.
共享资源是一些具有密钥值信息的数据.(因此可以使用此共享资源执行的可能操作是添加新的键值信息,
更新/删除现有的键值信息).
因此,我正在考虑使用xml文件物理存储信息,样本内容将
看起来像 ,
<Root>
<Key1>Value</Key1>
<Key2>Value</Key2>
<Key3>Value</Key3>
</Root>
Run Code Online (Sandbox Code Playgroud)
执行读取和操作的界面将如下所示,
public interface IDataHandler
{
IDictionary<string,string> GetData();
void SetData(string key,string value);
}
Run Code Online (Sandbox Code Playgroud)
我可以假设数据不会超过500 MB因此xml决定,如果数据增长,我将把它移动到DB.而且,与读取操作相比,数据的写入将更多.
与上述场景相关的查询/设计考虑很少,
可以在xml文件中处理500 MB的数据吗?
假设文件为xml,现在如何处理性能考虑?
为了在读取操作期间实现性能,可以在内存中缓存500 MB的数据,还是我们
还有其他选择吗?
现在,如果我使用上面的缓存机制,在写操作期间应该发生什么:
我应该通过转换,在每次写操作期间再次将字典内容写入xml
整个字典到xml?或者 - 有没有办法只更新其数据被修改/添加的xml文件的一部分?或任何
处理这种情况的其他方法? - 我应该通过将写操作放入队列和后台来再次提高性能
线程读取队列并启用实际的写操作,以便实际写入数据的人
因为写入文件会不会受到影响? - 要处理多线程场景,计划使用具有全局名称的Mutex,还有其他任何方案
更好的方法吗?
我确信,我操作的假设很少,并试图从那里建造,如果我错了
某些假设会改变大部分设计概念.因此,全新的解决方案也是
欢迎(保持表现为主要标准).提前致谢.
您的解决方案基于此 Stackoverflow 答案的设计原则:
正如您在考虑因素之一中提到的,上述解决方案涉及线程和队列。
此外,您可以使用BinaryFormatter获得更好的性能,而不是将数据序列化为 XML
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |