从DB读取和写入文件

时间:2011-07-13 08:09:00

标签: .net asp.net visual-studio file-io

场景 - 数据库中存在大量数据。 Utility使用datareader逐个读取记录并附加到txt / xml文件。最初用于读取一条记录的实用程序,将其写入文件;然后我改变它,以便读取大约10k条记录并将其放入内存(stringbuilder),然后刷新到文件,依此类推。时间减少非常棒。

所以,我猜文件I / O是瓶颈。我想进一步改进它。考虑使用某种缓冲区,然后使用一个线程从DB读取并放入缓冲区,另一个线程从缓冲区中取出并写入File。

有可能吗?从哪儿开始? 还有更好的选择吗?

2 个答案:

答案 0 :(得分:0)

起点是使用两个缓冲区,并将缓冲区内容异步写入文件。类似的东西:

buffera
bufferb
currentbuffer=buffera

fill currentbuffer with data
kickoff job to write currentbuffer to file
wait for previous write job to finish, if relevant.    
currentbuffer=otherbuffer

重复直到完成。

答案 1 :(得分:0)

如果你真的需要更好的性能,你可以像今天一样以10k的块读取数据,将开始/结束值传递给数据库,并使用多个线程将它们同时写入单独的文件。完成后,您连接/合并/追加文件。写入单个文件只能有很多改进,因为数据写入必须是顺序的。

之类的,

using (var output = File.Create("output"))
{
    foreach (var file in new[] { "file1", "file2" })
    {
        using (var input = File.OpenRead(file))
        {
            input.CopyTo(output);
        }
    }
}

不确定它是否真的可以大幅提升性能,但值得一试。

相关问题