我正在从事涉及数据采集的项目。一个非常重要的要求如下所述:
所以我打算使用一些Thread观察收到的数据并写下这个数据文件,但我不知道哪种做法最好(下面的代码不是真的,只是为了感觉):
第一个选项:单打开
using (var fs = new FileStream(filename, FileMode.CreateNew, FileAccess.Write))
fs.Write(headers, 0, headers.Length);
using (var fs = new FileStream(filename, FileMode.Append, FileAccess.Write))
{
while (acquisitionRunning)
{
Thread.Sleep(100);
if (getNewData(out _someData;))
{
fs.Write(_someData, 0, _someData.Length);
}
}
}
第二个选项:多重打开:
using (var fs = new FileStream(filename, FileMode.CreateNew, FileAccess.Write))
fs.Write(headers, 0, headers.Length);
while (acquisitionRunning)
{
Thread.Sleep(100);
if (getNewData(out _someData;))
{
using (var fs = new FileStream(filename, FileMode.Append, FileAccess.Write))
{
fs.Write(_someData, 0, _someData.Length);
}
}
}
应用程序应该在客户端计算机上工作,其他进程的文件访问不应该是一个问题。我最关心的是:
答案 0 :(得分:2)
在断电/等情况下保存文件内容的一种好方法是在每次写入后刷新文件流。这将确保您刚刚写入流中的内容立即写入磁盘。
答案 1 :(得分:1)
正如您所提到的,其他进程将不会访问该文件,因此保持打开不会使事情复杂化,而且会更快。但是,请记住,如果应用程序崩溃,锁定将保留在文件中,您可能需要根据您的方案进行相应处理。