c++ - 频繁读/写小文件会降低性能吗?

标签 c++ xml qt dom

我正在开发一个小部件,用于重新排序菜单。

为此,我添加了一些按钮,如 MoveUp、MoveDown、Add、Delete,它们应该更改 XML 文件中菜单的顺序,因为正在读取 XML 文件以填充菜单。

现在我的问题是,每次单击这些按钮时,我都应用了文件打开、写入和关闭操作,它会立即更改为 xml 文件。这对我来说是相对简单的方法。鉴于此,小部件也有组合框,它从 xml 中读取,然后填充小部件中内部级别子菜单的当前顺序。 (类似:MS outlook->tools->customize->RearrangeCommands)

我的 XML 文件很小,大约 1.5K。 我想知道哪个选项更好?

i) 我上面提到的那个,每次鼠标点击打开-读取-写入 XML 文件。

ii) 创建一个数据结构,一旦读取文件,存储数据,所有事件都发生在这些数据上,然后最后按 OK 按钮将数据写入实际的 XML 文件。

我个人喜欢选项 (i),它总体上很容易实现。 如果 (ii) 一个是更好的选择,那么我应该使用哪种数据结构? XML 文件格式如下:

<menu>
<action id="1">menu1</action>
<action id="9">menu2</action>
<submenus id="5" name="submenus 1">
        <action id="17">menu14</action>   
    </submenus>
<action id = "10">menu1</action>
<submenus id="7" name="submenus 1">
        <action id="3">menu14</action>   
    </submenus>
<action id="11">menu2</action>
</menu>

频繁读/写小文件和一次读取、创建数据结构来存储数据和最后只写一次之间的权衡,哪个更好?

注意:我将 QT DOM 与 c++ 一起用于所有这些目的。

最佳答案

我知道这不是 c# 但我不太喜欢 c++,所以如果有人能填补我的空白,那就太棒了

在 C# 中,您只需将 Xml 加载到 XDocument 对象中,然后在内存中进行操作,即即时操作。
完成后将它们保存到文件中。

这有一个缺点,当你崩溃时,你的更改就消失了。
要解决这个问题,您可以在指定的时间间隔内保存。
优点是您可以摆脱频繁的文件访问。

问题是否存在性能损失取决于您执行 IO 操作的方式: 如果你异步执行它们,即使你的操作系统有点被占用,你也不会浪费太多时间,同步在很大程度上取决于你的操作系统的性能,特别是文件系统的业务。

过于频繁的文件操作也会磨损存储设备。我知道我们可能不会在这里讨论具有约 10k IO 周期的 EEPROM,但仍然如此。

有人可以告诉我是否有提供类似功能的 c++ namespace /库?

关于c++ - 频繁读/写小文件会降低性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131335/

相关文章:

linux - 为 Qt 项目创建可执行文件

c++ - C 中按 "a A b B c C"顺序对字符串数组进行排序

xml - 在 XML 中实现命名空间时遇到问题

c++ - Qt问题将参数传递给插槽

java - Java解析XML时保留 `&#10; &#13;`等数字字符实体字符

java - org.dom4j.io.SAXReader.read(Reader reader) 方法是否保留 XML 元素和属性的顺序

c++ - 我怎样才能使 Qt 应用程序更小

c++ - 我可以用花括号构造一个链表吗?

c++ - Linux绘制像素缓冲区

mac/eclipse 上的 c++ 在崩溃时不显示错误