在C#中寻找一个简单的独立持久字典实现

Sam*_*ron 25 .net c#

对于一个开源项目,我正在寻找一个由文件支持的字典的简单实现.意思是,如果应用程序崩溃或重新启动字典将保持其状态.我想每次触摸字典时更新底层文件.(添加值或删除值).FileWatcher不是必需的,但它可能很有用.

class PersistentDictionary<T,V> : IDictionary<T,V>
{
    public PersistentDictionary(string filename)
    {

    } 
}
Run Code Online (Sandbox Code Playgroud)

要求:

  • 开源,不依赖于本机代码(没有sqlite)
  • 理想情况下,这是一个非常简短的实现
  • 设置或清除值时,不应重写整个基础文件,而应搜索文件中的位置并更新值.

类似的问题

lub*_*sko 23

  • bplustreedotnet

    bplusdotnet包是C#,java和Python中交叉兼容的数据结构实现库,对于需要存储和检索持久性信息的应用程序非常有用.bplusdotnet数据结构可以轻松存储与值关联的字符串键.

  • ESENT管理界面

    不是100%托管代码,但值得一提的是,作为非托管库本身已经是每个Windows XP/2003/Vista/7盒子的一部分

    ESENT是一个可嵌入的数据库存储引擎(ISAM),它是Windows的一部分.它提供可靠的,事务性的,并发的,高性能的数据存储,具有行级锁定,预写日志记录和快照隔离.这是ESENT Win32 API的托管包装器.

  • Akavache

    *Akavache是​​一个异步,持久的键值缓存,用于在C#中编写本机桌面和移动应用程序.可以把它想象成桌面应用程序的memcached.

- C5通用馆藏图书馆

C5提供标准.Net System.Collections.Generic命名空间未提供的功能和数据结构,例如持久性树数据结构,基于堆的优先级队列,散列索引数组列表和链接列表,以及有关集合更改的事件.


GvS*_*GvS 13

我来分析一下:

  1. 按键检索信息
  2. 持久存储
  3. 1值更改时,不想写回整个文件
  4. 应该幸免于崩溃

我想你想要一个数据库.

编辑:我认为你正在寻找错误的东西.搜索符合您要求的数据库.并改变你的一些要求,因为我认为很难满足所有这些要求.

  • ......魔鬼在细节中,这个答案中没有细节或代码.我明确要求实现IDictionary (7认同)
  • 我理解你在说什么,但数据库部分只是另一个实现细节,对于依赖于sqlite的解决方案你需要有代码来处理x64 vs x32你需要一个存储库和一堆其他东西,所以,是的嵌入式数据库可能是一个解决方案...... (2认同)

小智 8

我已经实现了你正在寻找的那种PersistedDictionary.底层存储是内置于Windows中的ESENT数据库引擎.代码可在此处获得:

http://managedesent.codeplex.com/


Mla*_*dic 6

一种方法是使用内置于windoows中的可扩展存储引擎来存储您的东西.它是一个原生的win数据库,支持索引,事务等...