【发布时间】:2021-02-02 21:44:00
【问题描述】:
我们有一个非常高性能的应用程序 - 或者更准确地说,是一个需要写入日志文件的可扩展应用程序。
每个实例都有自己的日志文件,但在查看性能指标时,我们偶尔会看到写入时间非常慢。日志文件将发送到共享磁盘,以便我们可以在假脱机的虚拟机消失时查看日志(使用它的磁盘)
在通过云提供商解决此问题时,他们建议应使用“a+”模式打开日志文件,每个:https://www.cplusplus.com/reference/cstdio/fopen/。
"a+" 追加/更新:打开一个文件进行更新(输入和输出) 所有输出操作都在文件末尾写入数据。 重新定位操作(fseek、fsetpos、rewind)影响下一个 输入操作,但输出操作将位置移回 文件结尾。如果文件不存在,则创建该文件。
这允许共享磁盘资源缓存写入;显然“只写”模式没有,这就是我们的问题 - 成千上万的客户端,每个客户端都必须在下一个可以写入它的日志文件之前保存到磁盘。
我找不到与 QIODevice 的打开标志等效的内容。我能做的最好的就是读/写,这与a+不同。
https://doc.qt.io/qt-5/qiodevice.html#OpenModeFlag-enum
在 QT 中是否有更好的方法来打开“仅附加但读取可缓存”的文件?
【问题讨论】:
-
QIODevice::ReadWrite | QIODevice::Append没有做你想做的事吗? -
存在细微差别。 ReadWrite 允许您尽可能地更新文件的“前面”部分。 a+ 的想法是“只是写入,但缓存写入”。无论如何,这是我正在尝试的最接近的。在我们进行另一次压力测试之前,很难说它是否有效。