c# – 内存映射文件IList实现,用于在内存中存储大型数据集?

前端之家收集整理的这篇文章主要介绍了c# – 内存映射文件IList实现,用于在内存中存储大型数据集?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要按照IList实现的巨大时间序列按时间顺序执行操作.数据最终存储在数据库中,但向数据库提交数千万个查询是没有意义的.

目前,内存中的IList在尝试存储超过800万(小)对象时会触发OutOfMemory异常,但我需要处理数千万.

经过一些研究,看起来最好的方法是将数据存储在磁盘上并通过IList包装器访问它.

Memory-mapped files(在.NET 4.0中引入)似乎是正确的接口,但我想知道编写一个应该实现IList(为了方便访问)并在内部处理内存映射文件的类的最佳方法.

如果您了解其他方式,我也很想知道!我想过使用来自db4o的数据的IList包装器的例子(someone mentionned here使用内存映射文件作为IoAdapterFile,尽管使用db4o可能会增加性能成本而不是直接处理内存映射文件).

我在2009年遇到了this question问,但它没有产生有用的答案或认真的想法.

解决方法

我发现这个 PersistentDictionary<>,但它只适用于字符串,通过阅读源代码我不确定它是为非常大的数据集而设计的.

ESENT PersistentDictionary<>更具可扩展性(最高16 TB),使用Windows(XP)中的ESENT数据库引擎,可以存储包含简单类型的所有可序列化对象.

Disk Based Data Structures,including Dictionary,List and Array with an “intelligent” serializer看起来与我正在寻找的完全一样,但它对于非常大的数据集并不顺利,特别是因为它还没有使用“原生”.NET MemoryMappedFiles,并且对32位系统的支持是实验性的.

更新1:我最终实现了自己的版本,广泛使用.NET MemoryMappedFiles;它非常快,一旦我为更多通用用法做了更好的操作,我可能会在Codeplex上发布它.

更新2:TeaFiles.Net也很适合我的目的.强烈推荐(和免费).

原文链接:https://www.f2er.com/csharp/100547.html

猜你在找的C#相关文章