c-示例如何从XML文件中读取多个值,并将它们与一个值进行有效比较

  • 本文关键字:有效 比较 一个 XML 文件 读取 xml
  • 更新时间 :
  • 英文 :


这实际上是一个两级问题。我们如何有效地从XML文件中读取多个值,然后如何将它们与不同的值进行比较。

尽可能有效地做到这一点非常重要,这才是真正的问题所在。

以下是现有代码的示例:

if (strcasecmp(stMsgData->paramName,"Device.a.b") == 0)
    {
        ret = aFunction();
    }
    else if (strcasecmp(stMsgData->paramName,"Device.z.o") == 0)
    {
        ret = bFunction();
    }
    else if (strcasecmp(stMsgData->paramName,"Device.g.j") == 0)
    {
        ret = cFunction();
    }

为了更好的例子,我们假设Device.a.b实际上就是Device。设备信息。制造商OUI。我们想要实现的主要目标是"Device.DeviceInfo.ManufacturerOUI"也可以是"Device.DeviceInfo.UUI"或"Device.DviceInfo.ManfOUI"等等。由于我们希望避免重新编译和更新可能有600项或更多项的代码,因此最好的方法似乎是从XML文件中进行比较(如果更明智的话,欢迎使用XML的替代品(。问题是,如何以最有效的方式实现这一点(示例代码(,以及是否有任何进一步的建议。

非常感谢。

简而言之:这里的性能问题是虚假的,从文件中读取比比较和几个分支慢很多。

实践关注:过早优化

实际上,这整件事都散发着过早优化的臭味特别是,因为您正在从文件中读取此数据。因此,如果你只是从文件中读取值,性能将主要取决于你读取文件的速度,因为:

  • 文件访问(通常(比您的比较慢很多,除非它是由操作系统缓存的。

  • 正确读取XML要比这些类型的比较慢得多。相对而言,快速读取XML文件仍然非常缓慢。

不要太担心性能,而是专注于一个好的设计,而不必像XML一样尝试所有酷的东西。您可以随时稍后对其进行配置并进行优化。

如果您真的希望这是快速的,我认为您可以做的主要区别是不使用XML这似乎是你项目中的一个选择,这让我进入了答案的下一部分。

设计关注点:构建您的项目

我认为你需要更多地研究建筑。您担心每次更改某些值时都必须重新构建"整个项目",但有一些合法的方法可以解决这一问题,例如将这些值存储在单独的编译单元中。然后,当您更改值并重新链接项目时,您可以重新编译该文件。他们在项目其余部分中使用的方法由您决定,但全局常量变量可能是C.的最佳方法

比较字符串

假设我们没有将值存储在单独的编译单元中。

假设您说您希望能够检查数百个可能的字符串,我认为您应该使用字符串哈希表来帮助进行检查。为每个可能的值提供键,如果某些允许的键有替代项,则表中映射的值可以包含每种类型键的唯一标识符。

例如"Device.DeviceInfo.ManufacturerOUI"one_answers"Device.DiviceInfo.UUI"都可以映射到ID DEVICE_INFO_OUI

最新更新