gpt4 book ai didi

c# - 阵列等的磁盘存储

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:31 33 4
gpt4 key购买 nike

有没有人有在磁盘上存储数据的经验?我拥有的是一个内存中的建模应用程序,可以进行计算等。基本上,数据存储为对象列表,具有嵌套的键值集合,如 Dictionary< int、Dictionary< int、T>>。

现在我使用 SQL-Server 作为持久层,但我很少使用它的功能。所以我想我可以自己将数据写入/读取磁盘以减少依赖性并简化安装。

所以我写了一个小程序,以大致这种格式将每个数组写入磁盘,其中单词“ObjId”、“Type”、“Valid”和“Count”实际上不在文件中,它们是第一个, 2nd, 3rd 和 byte[] 中的 4th int,然后是 < int, T > 对。 52 来自 4 * 4 + 3 * (4 + 8)。 (int 4 个字节,double 8 个字节)

Bytes: 52

ObjId: 123
Valid: 234
Type: double
Count: 3
1 .23
2 .34
3 .45

在现实生活中没有缩进等,它们都是长流中的连续字节。

这个很好,写一次。但是当我想在中间的某个地方写一个额外的值时,我必须重写整个东西。此外,我无法轻松更新单个值。

一种替代方法是将每个对象写入一个单独的文件,这样我只需重写它。但这似乎效率很低,因为我得到的文件是 1kb,但在磁盘上是 4kB,所以我会在那里浪费空间。

那么我需要做什么才能增量写入磁盘上的这个文件?我知道 SqlServer 在写入数据的地方有“页面”,是这样吗?

是否有任何库可以解决此类问题?也许一些虚拟文件可以让我将它们视为单独的 byte[] 但将存储作为单个 psysical 文件处理?理想压缩..(插入它,但谁知道..我之前很惊讶:-)

提前致谢

格特简

最佳答案

如果您不想要 RDBMS 的开销,您可以使用像 Berkeley DB 这样的键值数据库。这里有一个 C# 接口(interface):

Berkeley DB for .NET

您可以为每个数组设置一个条目,并在需要时重写它。数据库文件的其余部分将保持不变,因此比重写整个文件要快得多。

您可以重用在写出数组时已经实现的序列化逻辑。您只需为每个数组添加一个唯一的键。

关于c# - 阵列等的磁盘存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102237/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com