【问题标题】:Save single column datatable to disk fast将单列数据表快速保存到磁盘
【发布时间】:2014-05-02 03:07:46
【问题描述】:

我必须将数据表保存到磁盘。它只是一列,我一直在循环保存每一行,我尝试将这些行添加到一个字符串然后保存。

 For i = 0 To dt.Rows.Count - 1
 fd.savefile("c:\filename.txt, " " & dt.Rows(i).Item("word"), "append")   'appends to file
 'or
 wordList = wordList & " " & dt.Rows(i).Item("word")  'builds up the word list and..
 Next
 '
 fd.saveFile("c:\filename.txt", "overwrite") 'then saves it to disk.

速度很慢。

我发现了这个:

http://bytes.com/topic/c-sharp/answers/250808-storing-datatable-data-hard-disk

FileStream fs = new FileStream(@"C:\test.bin", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, dt);
fs.Close();

这样可以在超快的时间内生成数据的序列化版本。比我的循环过程快得多。我怎样才能像这样转储数据表,但没有元数据?它不需要读回数据表。 serialize 方法将 etc 标签放在任何地方。

【问题讨论】:

    标签: c# .net performance datatable disk


    【解决方案1】:

    不要为每一行重新打开文件。要么继续写入同一个流,要么直接使用File 辅助方法之一(如File.WriteAllLines)一次全部写入:

    File.WriteAllLines(@"c:\filename.txt", 
        dt.Rows.OfType<DataRow>().Select(r => r.Item("word"));
    

    【讨论】:

    • 这很酷。但它在输出文件的每一行之间放置了回车符。我能以某种方式避免这种情况吗?
    • @bendecko 当然 - 查看其他 File 助手或以您喜欢的方式写信给 StreamWriter
    • 我明白了.. 我明白了.. 只是习惯了这一切。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2012-03-04
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多