最快(加载和保存)存储大型2D阵列的方式

时间:2013-06-19 19:43:10

标签: c# file-io io

我有一个2,000 x 2,000的二维物体阵列:

 public class Plants
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Health { get; set; }

}

我正在寻求关于什么是最快(写作和阅读)整个文件的建议?也就是说,我永远不需要寻找这个文件并从特定位置读/写。

有什么想法吗?


感谢您的反馈! 我最终使用了二进制文件。文件的大小约为55MB,它可以很快地保存/加载(〜几秒)。

2 个答案:

答案 0 :(得分:2)

真的很难回答"最快"像这样的问题。问题是你的每个硬盘,CPU,内存大小,内存速度,主板等都可能与我的不同。然后,文件大小和数据形状也很重要。

加载未压缩文件可以更好地处理磁盘速度非常快且CPU平均或速度慢的系统上的大型文件。解压缩文件可能会在具有快速CPU和平均速度较慢的磁盘驱动器的系统上更好地工作。现在,将内存使用和访问速度提升到混合中。

一旦处理了所有这些的潜在影响,您还需要处理软件中使用数据的情况。你能加载一次并重复使用吗?那么你不需要像你想象的那样关心加载的速度。或者你需要经常阅读和写作,只是在这里和那里只有很小的变化?然后,您应该考虑随机存取存储或使用数据库。

既然你已经看过所有这些问题(还有更多),你可能会想到,"是否值得所有这些努力?"如果你这么想,那么你就在正确的位置。

不要预先优化。选择能够正常工作的东西 (不一定是最好的),然后在需要帮助时进行优化。

答案 1 :(得分:1)

最快的是你手动读取/写入字节流并写入Name的长度,以便反序列化。

几乎同样快速(并且更容易)的是Protobuf-Net(具有易于定义的界面的二进制协议)或Json.Net + Zip。可以调整Protobuf来编写一个长度标题,以防你在处理植物时需要将它们流出来。

还应该查看GZipStream或DeflateStream,因为它可以在一次性从磁盘访问那么多数据时提供好处。