我正在制作一个小部件,用于重新排序菜单。
为此,我添加了一些按钮,如MoveUp,MoveDown,Add,Delete,它们可以改变XML文件中菜单的顺序,因为正在读取XML文件以填充菜单。
现在我的问题是我已经为这些按钮的每次点击应用了文件打开,写入和关闭操作,这些操作立即变为xml文件。这对我来说相对简单。鉴于此,窗口小部件也有comboBox,它从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>
经常读/写一个小文件和一次读取之间的权衡,创建一个数据结构来存储数据,最后只写一次,哪一个是更好的选择?
注意:我正在使用带有c ++的QT DOM来实现这一目的。
答案 0 :(得分:2)
我知道这不是c#但是我不太喜欢c ++,所以如果有人能填补我的空白,那就太棒了
在C#中,您可以将Xml加载到XDocument对象中并在内存中进行操作,即即时。 完成后,将它们保存到文件中。
这样做的缺点是,当您崩溃时,您的更改就会消失 要移植它,您可以保存在一个明确的intervall中 优点是您可以摆脱频繁的文件访问。
如果存在性能损失,问题取决于您执行IO操作的方式: 如果你执行异步操作,即使你的操作系统有点占用也不会浪费太多时间,同步很大程度上取决于你的操作系统的性能,特别是文件系统的业务。
文件操作过于频繁也会损坏存储设备。我知道我们可能不会在这里讨论带有~10k IO周期的EEPROM,但仍然如此。
有人能让我知道有没有提供类似功能的c ++命名空间/库?
答案 1 :(得分:1)
我认为将配置直接写入文件是不好的做法。想象一下,您希望获得其他代码中的菜单顺序。例如,如果隐藏或移动“文件”菜单,则需要在某些时刻显示消息框。
现在,您需要打开XML并在每次要获取此信息时对其进行解析。您需要复制解析XML并从中获取菜单所需的代码。
如果你有一个包含你的设置的结构,你可以将它存储在变量的某个地方,并随时使用它。没有重复,代码更干净,更容易编写单元测试。
一般来说,根据我的经验,我知道为设置创建结构是好的。这种方法在开始时看起来更难,但最有可能在将来为您节省时间。