2014-12-01 29 views
2

我们有一个应用程序可以记录很多日志。我们登录的介质是SLC SSD驱动器,但我们开始发现该领域存在一些故障。我们可以关闭日志(我们可以),有日志级别(我们有),但是有时工程师开启日志记录来诊断故障并忘记关闭它,这会导致一段时间后发生故障的SSD。将日志写入SSD的最佳方式

查看日志记录代码,我们将日志条目保存到一个队列中,每隔5秒钟迭代一次该集合,并使用File.AppendAllText将行写入文件。按照MSDN写入文件,然后关闭它。

什么是更好的制度来实现相同的功能,但防止(或减少)对SSD的损害?

在软件启动时打开FileStream,在使用过程中写入流并在软件退出前关闭会更好吗?这将如何缓解磁盘级别的情况?涉及哪些流程以及如何更好地打开文件并立即关闭它。使用FileStream'感觉'更好,但在进行更改之前,我需要更具体的理由。

也许有更好的方法,我们没有考虑。

+0

SSD的写入时间有限。看看不同类型的磁盘技术或其他品牌的SSD。 http://www.pcworld.com/article/2043634/how-to-stretch-the-life-of-your-ssd-storage.html – Paparazzi 2014-12-01 16:10:18

+0

由于其他原因我们使用SSD,因此我们无法更改100系统。我们已经使用我们认为是SSD最强大的品牌(成本与质量)。我正在寻找一个答案,看看.NET如何写入驱动器以及该过程的机制。 – Sparers 2014-12-01 16:13:05

+0

每5秒写一次,每5秒写一次。我不认为将文件打开将成为一个神奇的子弹。文件流写入光盘。 MLC的标称寿命为10,000次写周期。每5秒钟只有14个小时。 – Paparazzi 2014-12-01 16:50:06

回答

0

这不是关于写入次数,而是关于写入SSD页面的数量。你缓冲得越多,物理写入越少,你就会变得更好。

AppendAllText要追加一个单行是一个非常低效的方法来做到这一点。它会烧毁大量的CPU,因为每行都必须打开和关闭大量对象和句柄。文件大小的每次变化都会导致NTFS日志在更改变硬时刷新。

每5秒钟拨打一个AppendXxx来拨打所有数据,或使用FileStream建立类似的事情。你可以让它打开或不打开。没关系。每五秒钟增加一次IO对耐力毫无意义。

不可能比这更有效率。该方案以连续的方式写入最少量的数据。

考虑压缩你写的东西。

+0

这几乎是我脑海中的东西,所以很高兴听到验证 – Sparers 2014-12-04 16:06:56

1

如果您有足够的内存来保存日志消息,则排队和承诺的次数会减少。 但是,如果问题出现,您将不会收到最近的日志消息。

相关问题