将数组保存到文件

时间:2012-02-24 07:41:15

标签: vb.net

我有一个填充了数千个条目的字符串数组。我想要以最快的方式将这些数据保存到磁盘并重新加载它。

目前我循环遍历数组并将此数据附加到字符串然后保存此字符串。这需要很长时间。

最快/最有效的方法是什么?

由于

4 个答案:

答案 0 :(得分:7)

 Dim FileName as string=Application.StartupPath & "\myarray.txt"
 IO.File.WriteAllLines(FileName,myarray)

 Dim FileName as string=Application.StartupPath & "\myarray.txt"
 Dim myarray() As String = File.ReadAllLines(FileName)

答案 1 :(得分:1)

生成的文件对人类可读有多重要?如果它主要是稍后由程序读取,那么你肯定应该使用序列化:

public void SaveArray (string[] array)
{
    NetDataContractSerializer serializer = new NetDataContractSerializer();
    using (FileStream file = System.IO.File.Create(_filename))
    {
         serializer.Serialize(file, array);
    }
}

修改

总结这个方法相对于下面建议的其他两个方法的优点,第一个是使用StringBuilder连接一个大字符串然后将其保存到磁盘,第二个使用WriteAllLines将字符串数组写入磁盘:

第一种方法将完全失去对原始字符串列表的保真度,因为它会将它们一起整理成一个字符串。你以后能分开吗?它们之间是否有众所周知的分隔符?不必要。它比在它们之间调用+更有效,但它不是存储它们的好方法。

第二种方法更好,因为每个字符串将保存到不同的行,并且可以使用ReadAllLines回读,但是你仍然处于不稳定的地方。如果任何字符串包含NewLine字符会发生什么?写入时将是一个字符串,但回读时会有两个不同的字符串。同样,调用WriteAllLines / ReadAllLines依赖于换行符作为良好的分隔符,但不一定如此。

使用序列化程序 - 无论是NetDataContractSerializer,BinaryFormatter还是其他任何内容都无关紧要 - 将保持原始数据结构的完全保真度,只需要一点点开销。

答案 2 :(得分:-1)

尝试使用StringBuilder

请参阅msdn reference了解更多

为什么选择stringbuilder?

处理大文件时。建议使用StringBuilder类而不是常规字符串类。 将字符串附加在一起,需要将旧字符串复制到新字符串中。 字符串构建器是可以轻松更改大小的缓冲区,您可以更快地追加和删除。

答案 3 :(得分:-1)

您应该使用字符串构建器循环数据,这比普通字符串快得多。

然后从IO库创建流编写器/阅读器(当您要加载文件时)并在磁盘上创建文件。