首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将日志写入SSD的最佳方法

将日志写入SSD的最佳方法
EN

Stack Overflow用户
提问于 2014-12-01 15:30:25
回答 2查看 1.3K关注 0票数 2

我们有一个应用程序可以进行大量的日志记录。我们登录到的介质是SLC SSD驱动器,但是我们开始在这个领域看到一些故障。我们可以关闭日志(我们需要),有日志级别(我们有),但是有时工程师会打开日志来诊断一个故障并忘记关闭它,这会导致SSD在一段时间后失败。

查看日志代码,我们将日志条目保存到队列中,每5秒进行一次迭代,并使用File.AppendAllText将行写入文件。

根据MSDN,这会写入文件,然后关闭它。

除了防止(或减少)对SSD的损害外,还有什么更好的制度来实现同样的功能呢?

是否最好在软件开始时打开一个FileStream,在使用时写到流,然后在软件退出之前关闭?这将如何缓解磁盘级的情况?所涉及的进程是什么,这比打开文件并立即关闭它更好。使用FileStream感觉更好,但在进行更改之前,我需要一个更具体的理由。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-02 13:45:06

这与其说是写的数量,不如说是写的SSD页面的数量。缓冲区越多,物理写入越少,结果越好。

添加一行的AppendAllText是一种非常低效率的方法。它消耗了大量的CPU,因为每一行都必须打开和关闭大量的对象和句柄。每次更改文件大小都会导致NTFS日志刷新,当该更改变硬时。

每隔5秒钟用一个AppendXxx调用写出所有数据,或者使用FileStream构建类似的数据。你可以把它打开也可以不开。无所谓。每5秒增加一次IO对耐力来说是毫无意义的。

没有比这更有效率的了。该方案以顺序方式写入最小数据量。

考虑压缩你写的东西。

票数 0
EN

Stack Overflow用户

发布于 2014-12-02 13:33:05

如果您有足够的内存来保存日志消息,那么队列和提交次数就会减少。但问题是,如果它下降了,您将不会有最近的日志消息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27231691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档