【发布时间】:2016-05-04 14:00:13
【问题描述】:
我需要对文本文件进行修改并保持原始文件不变。现在我正在使用读取器/写入器并读取文件,然后在没有修改的情况下将其写回。
不幸的是,文本文件很大,大约 2gb,大约需要一个小时才能完成(因为文本文件位于网络驱动器上)。
使用 file.Move 会比读/写更快吗?例如,将文本文件移动到本地机器,进行修改,然后将其移回?
或者,复制原件并以这种方式进行修改和修改,而不必读/写?
我当前的代码:
try
{
using (StreamReader reader = new StreamReader(filePath))
{
using (StreamWriter writer = new StreamWriter(output))
{
//go through the whole txt file
while (!reader.EndOfStream)
{
//gets the line
line = reader.ReadLine();
if (!modification case goes here))
{
writer.Write(line);
}
}
}
}
}
}
任何帮助将不胜感激!
【问题讨论】:
-
您是否尝试将文件复制到本地计算机然后再复制回来?这将为您提供一个基准时间,即在本地修改文件将花费时间。如果来回复制接近 1 小时,那么您不太可能从本地修改中获得很多好处。
-
性能影响在哪里?如果它不在线 = reader.ReadLine();那么文件的位置无关紧要,我猜瓶颈将是您的修改检查。如果读取线();是您的瓶颈吗?我认为在本地移动文件然后再返回会有所帮助。
-
感谢您的建议!我会立即测试并报告。
-
多个客户端是否可以通过网络访问该文件?如果是,则需要某种锁定解决方案来确保您可以安全地修改文件。此外,显而易见的几点:1)如果可能的话,将文件分成更小的块。 2) 切换到 1GbE 设备(不再昂贵),3) 直接在联网机器上安装应用程序/服务,4) 切换到 SMB/iSCSI,这将允许您使用内存映射处理文件。