我有一个填充了数千个条目的字符串数组。我想要以最快的方式将这些数据保存到磁盘并重新加载它。
目前我循环遍历数组并将此数据附加到字符串然后保存此字符串。这需要很长时间。
最快/最有效的方法是什么?
由于
答案 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库创建流编写器/阅读器(当您要加载文件时)并在磁盘上创建文件。