当前位置: 首页 > news >正文

C++ 通过XML读取参数

目录

方法1:一次读取一个参数,每读取一个参数调用一次函数

方法2:一次性读取一个节点中的所有参数,然后调用一次函数

方法3:一次性读取所有参数

推荐方案

示例代码

总结


0、XML示例

<ConfigurationSettings><ImagingModule><ROIConfiguration><ConfigurationParameter name="LightingType" value="2" description="1: Front lighting; 2: Rear lighting; Default: 1."/><ConfigurationParameter name="ROIThreshold" value="30" description="Threshold for identifying the region of interest (ROI); Range: [0, 255]; Default: 20."/></ROIConfiguration><ImagePreprocessing><ConfigurationParameter name="EdgeExclusion" value="5" description="Size of the edge exclusion zone; Range: [1, 50]; Default: 3."/><ConfigurationParameter name="CorrectionApplied" value="1" description="Apply geometric correction; 0 or 1; Default: 1."/><ConfigurationParameter name="ContrastEnhancement" value="0" description="Enable/Disable contrast enhancement; 0 or 1; Default: 1."/><ConfigurationParameter name="DownscaleFactor" value="1.5" description="Downscaling factor for preprocessing steps; Default: 2."/><ConfigurationParameter name="GaussianBlurSigma" value="5" description="Standard deviation for Gaussian blur applied; Default: 10."/><ConfigurationParameter name="NonLocalMeansStrength" value="20" description="Strength parameter for non-local means denoising; Default: 50."/></ImagePreprocessing></ImagingModule>
</ConfigurationSettings>

方法1:一次读取一个参数,每读取一个参数调用一次函数

  • 优点

    • 逻辑简单:每次只处理一个参数,代码逻辑清晰,容易理解和维护。

    • 灵活性高:如果某个参数有问题(如格式错误),可以单独处理,而不影响其他参数。

  • 缺点

    • 性能问题:如果XML文件中有大量参数,频繁调用函数会导致性能下降,尤其是在文件较大时。

    • 代码冗余:每次调用函数都需要重复一些逻辑,如打开和关闭节点等。

方法2:一次性读取一个节点中的所有参数,然后调用一次函数

  • 优点

    • 性能提升:减少函数调用次数,每次处理一个节点的所有参数,减少了重复的节点访问操作。

    • 代码简洁:逻辑更加集中,减少代码冗余,便于维护。

  • 缺点

    • 内存占用:如果节点中的参数非常多,可能会占用较多内存(虽然对于50KB的文件影响不大,但如果后期文件增大,需要考虑)。

    • 错误处理复杂:如果一个节点中的某个参数有问题,可能需要额外的逻辑来处理。

方法3:一次性读取所有参数

  • 优点

    • 极致性能:只需要一次遍历XML文件,将所有参数读取到std::map中,性能最优。

    • 代码简洁:逻辑集中,代码更加简洁。

  • 缺点

    • 内存占用:需要一次性将所有参数加载到内存中,如果文件非常大,可能会导致内存不足。

    • 错误处理复杂:如果某个参数有问题,可能需要在读取过程中就处理,否则会影响整个程序的运行。

推荐方案

根据你的需求和文件大小(目前50KB,后期可能增大),推荐采用方法2(一次性读取一个节点中的所有参数,然后调用一次函数),理由如下:

  1. 性能和可维护性的平衡:方法2在性能和可维护性之间取得了较好的平衡。它减少了函数调用次数,同时逻辑相对集中,便于维护。

  2. 适应性:即使文件后期增大,方法2仍然可以通过优化节点处理逻辑来应对。例如,可以对每个节点的参数进行分批处理,避免内存占用过高。

  3. 错误处理:虽然方法2在错误处理上稍微复杂一些,但可以通过在节点处理过程中增加校验逻辑来解决。

示例代码

https://download.csdn.net/download/weixin_42215453/90364723

总结

  • 方法2(一次性读取一个节点中的所有参数,然后调用一次函数)是最推荐的方案,因为它在性能和可维护性之间取得了较好的平衡。

  • 如果文件后期确实会非常大(如超过100MB),可以考虑进一步优化,例如分批处理节点,或者采用流式解析(如XMLReader)来减少内存占用。

http://www.lryc.cn/news/534526.html

相关文章:

  • WiFi配网流程—SmartConfig 配网流程
  • 哪些情况会导致JVM内存泄露
  • 蓝桥杯K倍区间(前缀和与差分,取模化简)
  • 2025上半年还可以参加那些数学建模竞赛?
  • 网易日常实习一面面经
  • Excel 笔记
  • Python的
  • 【个人开发】cuda12.6安装vllm安装实践【内含踩坑经验】
  • ASP.NET Core SignalR身份验证
  • 微信小程序(第一集)
  • 为什么细胞是圆的?
  • 游戏引擎学习第96天
  • 本地优先的分布式锁实现
  • 基于知乎平台的“开源AI智能名片2 + 1链动模式S2B2C商城小程序”引流策略研究
  • DeepSeek-Coder系列模型:智能编程助手的未来
  • FPGA开发技能(10)热电偶测温ADS1118方案
  • 如何优化网站结构以促进快速收录?
  • 算法-动态规划-0-1背包问题(二维0-1背包,背包求方案数,求背包具体方案)
  • 位运算算法篇:位运算实现加减乘除
  • 【故障处理】ORA-19849 ORA-19612 0RA-17627 ORA-03114
  • 【MQ】Spring3 中 RabbitMQ 的使用与常见场景
  • jupyterLab插件开发
  • 拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动
  • QT-常见问题
  • 如何通过腾讯 ima.copilot 训练自己的知识库
  • 关于近期我的交流之深度思考DeepSeek归纳总结
  • 智能生鲜配送管理系统:生鲜及快消品行业的数字化转型利器
  • DeepSeek和ChatGPT的优劣或者区别(答案来DeepSeek和ChatGPT)
  • 【C语言标准库函数】标准输入输出函数详解[5]:格式化文件输入输出
  • [概率论] 随机变量