0

我有一个 2,000 x 2,000 2D 对象数组:

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

}

我正在就一口吞下整个文件最快(用于写入和读取)的建议征求意见?也就是说,我永远不需要寻找这个文件并从特定位置读/写。

有什么想法吗?


感谢您的反馈!我最终使用了 binarywriter。文件大小约为 55MB,保存/加载速度非常快(约几秒)。

4

2 回答 2

2

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

对于具有非常快的磁盘和平均或慢速 CPU 的系统上的大文件,加载未压缩的文件可以更好地工作。在具有快速 CPU 和平均到慢速磁盘驱动器的系统上,解压缩文件可能效果更好。现在,将内存使用率和访问速度混为一谈。

一旦您处理了所有这些的潜在影响,您还需要处理围绕软件中数据使用的情况。你可以加载一次并重复使用它吗?那么你就不需要像你想象的那样关心加载速度了。或者您是否需要非常频繁地阅读和编写它,只在各处进行细微的更改?然后你应该考虑随机访问存储或使用数据库。

既然您已经了解了所有这些问题(还有更多问题),您可能会想,“所有这些努力都值得吗?” 如果您是这样想的,那么您来对地方了。

不要预先优化。选择一些效果很好的东西(不一定是绝对最好的),然后在需要帮助时进行优化。

于 2013-06-19T20:04:18.650 回答
1

最快的是您将字节读/写到流中,并且还写入了 Name 的长度,以便可以对其进行反序列化。

Protobuf-Net(具有易于定义接口的二进制协议)或 Json.Net + Zip 几乎同样快(而且更容易)。可以调整 Protobuf 以写入长度标头,以防在处理植物时需要流式传输它们。

还应该考虑 GZipStream 或 DeflateStream,因为它可能会在一次从磁盘访问那么多数据时提供好处。

于 2013-06-19T19:54:27.943 回答