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

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

问题描述:

我需要将信息记录到每分钟1000-2000次左右的文件。我还需要保存该信息以防应用程序崩溃。保持文件打开,不要在应用程序崩溃时丢失数据

目前这里是我在做什么:

using(StreamWriter sw=new StreamWriter(filename,true)) 
{ 
    sw.WriteLine(info); 
} 

这工作,但它是极其缓慢。

我想在做这样的事情:

​​

,但是当我写这样的代码,我怕我存储的信息将丢失的应用程序崩溃时。

我该如何保存文件中的信息,而无需一直打开和关闭它?

+2

使用[log4net的](http://www.codeproject.com/Articles/140911/log4net-Tutorial) – 2013-05-14 15:02:17

您可以在每次写入后调用StreamWriter.Flush()

public static void Main(...) 
{ 
    ..... 
    sw.WriteLine(....); 
    sw.Flush(); 
} 

但是,你应该使用NLogLog4Net

+0

这些日志框架中的任何一个都能够有效地“事先”记录事物,并且如果操作成功完成,那么这些条目就会“蒸发”,但如果操作失败仍然会写入内容。 – supercat 2014-11-05 17:00:39

+0

@supercat据我所知。 – 2014-11-05 18:19:32

+0

好奇。我一直在考虑编写我自己的日志框架,将它作为主要功能之一,但却被“不要自己编写日志框架”的口号所吓倒。在许多情况下,如果例如一个远程服务器的操作成功,通过记录发送和接收的所有内容的详细信息,任何事情都不会获得,但是如果操作失败,即使通常没有价值的信息也可能变得非常有价值。能够具有日志冗长取决于操作是成功还是失败似乎非常有用。 – supercat 2014-11-05 18:26:47

我用这class它实现了一个队列,每X消息或Y时间刷新。

你可以改善它的移动用块中的,而在flushLog(外侧)和设置固定文件名