目录
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(一次性读取一个节点中的所有参数,然后调用一次函数),理由如下:
性能和可维护性的平衡:方法2在性能和可维护性之间取得了较好的平衡。它减少了函数调用次数,同时逻辑相对集中,便于维护。
适应性:即使文件后期增大,方法2仍然可以通过优化节点处理逻辑来应对。例如,可以对每个节点的参数进行分批处理,避免内存占用过高。
错误处理:虽然方法2在错误处理上稍微复杂一些,但可以通过在节点处理过程中增加校验逻辑来解决。
示例代码
https://download.csdn.net/download/weixin_42215453/90364723
总结
方法2(一次性读取一个节点中的所有参数,然后调用一次函数)是最推荐的方案,因为它在性能和可维护性之间取得了较好的平衡。
如果文件后期确实会非常大(如超过100MB),可以考虑进一步优化,例如分批处理节点,或者采用流式解析(如
XMLReader
)来减少内存占用。