低开销文件写入过程应该在它自己的线程上吗?

时间:2011-06-21 05:26:35

标签: c# wpf multithreading logging file-io

我有一个wpf应用程序很少写入文本日志文件(写入之间从0.25秒到4秒)。 每次写入都是一行短文本。 每次写作后我都不会冲洗。

目前,这是直接在主UI线程上调用的,因为我认为所花费的时间长度甚至还没有开始变得令人担忧。

..这是正确的方法吗? 我应该在它自己的线程上进行日志记录过程,并向它发送一些异步事件来记录数据吗?

6 个答案:

答案 0 :(得分:2)

查看NLog,Spring或任何众多的日志记录平台。让你的应用程序很酷,并担心以后进行日志记录的最佳方式。记录调用将来自你的gui方法,它们的实现方式应该被抽象到框架上,这样你就可以把它们放在不同的线程上等等。

答案 1 :(得分:2)

我建议您尝试Log4Net吗?它以非常简单,轻便且易于使用的包装为您处理所有这些。

答案 2 :(得分:1)

文件写入由文件系统缓存缓冲。它只需要几微秒。您必须以大约每秒10兆字节的速度写入,或者使用严重碎片化的硬盘驱动器才能使缓存填满,以便您必须等待磁盘。你不是很接近这一点。

答案 3 :(得分:1)

我认为在这种写入速率下,你会从线程中获得更多的开销(上下文切换,同步它等),而不是不这样做。

答案 4 :(得分:1)

在你的情况下,将日志记录过程保留在UI线程中并不是什么大问题,但是我个人更愿意在不同的线程中编写日志,因为这样做会将日志记录与主线程分开并且对于可维护性,通常由于需求更改或错误跟踪,日志可能更频繁,或者您可能希望更改为Windows事件日志..

我认为使用日志记录线程是更好的选择。

答案 5 :(得分:0)

您可能希望在MSDN Managed Threading Best Practices上花很多时间,特别是有关Parallel Programming in the .NET Framework的说明。另外,我个人建议您依赖Apache log4net等日志框架。