C# 保持文件打开,don';不要在应用程序崩溃时丢失数据

C# 保持文件打开,don';不要在应用程序崩溃时丢失数据,c#,filestream,C#,Filestream,我需要将信息记录到一个文件中,大约每分钟1000-2000次。我还需要保存这些信息,以防应用程序崩溃 目前我正在做的是: using(StreamWriter sw=new StreamWriter(filename,true)) { sw.WriteLine(info); } 这是可行的,但速度非常慢 我想这样做: static StreamWriter sw=new StreamWriter(file,true); .... public static void Main(..

我需要将信息记录到一个文件中,大约每分钟1000-2000次。我还需要保存这些信息,以防应用程序崩溃

目前我正在做的是:

using(StreamWriter sw=new StreamWriter(filename,true))
{
    sw.WriteLine(info);
}
这是可行的,但速度非常慢

我想这样做:

static StreamWriter sw=new StreamWriter(file,true);

....

public static void Main(...)
{
    .....
    sw.WriteLine(....);
}
但是当我编写这样的代码时,我担心当应用程序崩溃时,我存储的信息会丢失

如何在文件中保留信息而不必一直打开和关闭它?

每次写入后,您都可以调用

public static void Main(...)
{
    .....
    sw.WriteLine(....);
    sw.Flush();
}
但你应该使用或

我已经使用了它,它实现了一个队列,该队列每X消息或Y时间刷新一次


您可以在flushLog()中将using块移到外部并设置固定文件名,从而改进它。如果操作成功完成,这些日志框架中的任何一个都能够有效地“原则性地”记录事情,并使这些条目“蒸发”掉,但如果操作失败,你还会写吗?@supercat据我所知不太清楚。好奇。我一直在考虑编写自己的日志框架,并将其作为主要功能之一,但被“不要使用自己的日志框架”的口号吓坏了。在许多情况下,例如,如果远程服务器的操作成功,那么记录发送到远程服务器和从远程服务器接收到的所有信息的详细信息将一无所获,但是如果操作失败,即使是通常毫无价值的信息也可能变得非常有价值。日志记录的详细程度取决于操作的成功与否,这似乎非常有用。@supercat我想大多数人只会选择
if(operationFailed)Log.Report(“something”)
方法。在某些情况下,这很好;当事情“轻微”出错但没有立即被发现时,困难就出现了。打个比方,我看了一个节目,一家啤酒公司雇佣了一家公司在其生产线上安装高速摄像机,连续记录5000帧/秒到缓冲器中,以确定为什么啤酒罐会开始一天一次到处飞。摄像机被允许运行,直到线路“崩溃”,然后对它们进行检查,看看在崩溃前30秒左右发生了什么。