c#的磁盘支持字典/缓存

BCS*_*BCS 11 c# caching disk-based

我正在寻找一种用于缓存大量数据的解决方案.

相关问题,但针对不同语言:

关于不同术语的问题:

我不需要(或者想要支付任何费用)持久性,事务,线程安全等,并且想要使用比List <>或Dictionary <>更复杂的东西.

如果我必须编写代码,我将把所有内容保存为临时目录中的文件:

string Get(int i)
{
   File.ReadAllText(Path.Combine(root,i.ToString());
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,索引将是一个int(并且它们应该是连续的或足够接近的)并且数据将是一个string所以我可以放弃对待两个POD并且宁愿超光并且做到这一点.

用法是我有一系列3k文件(如文件#1到#3000),总计650MB,需要为序列中的每一步做差异.我希望总数大约相同或更多,我不想将所有内容保留在内存中(更大的情况可能会出现在我无法实现的地方).


很多人为我的问题提出了不同的解决方案.然而似乎没有人针对我的小利基.我正在考虑磁盘备份缓存的原因是因为我预计我当前的使用将耗尽我可用地址空间的1/3到1/2.我担心较大的案件会耗尽空间.我并不担心踩踏,持久或复制.我正在寻找的是使用最少代码,最小使用占用空间,最小内存开销和最小复杂性的最小解决方案.

我开始认为我过于乐观了.

Sco*_*ski 5

你真正想要的是 B 树。这是数据库使用的主要数据结构。它旨在使您能够根据需要有效地将数据结构的部分与磁盘交换。

我不知道有任何广泛使用的、高质量的 C# 独立 B 树实现。

然而,一种简单的获取方法是使用 Sql Compact 数据库。Sql Compact 引擎将在进程内运行,因此您不需要运行单独的服务。它会给你一个 B 树,但没有所有令人头痛的事情。您只需使用 SQL 即可访问数据。


leo*_*ora 0

您可以将MS 应用程序块与基于磁盘的缓存解决方案一起使用