代码之家  ›  专栏  ›  技术社区  ›  Raj

C字符串性能-比较更快的是字符串文本或字符串长度

  •  4
  • Raj  · 技术社区  · 15 年前

    嘿,伙计们,我必须读一个包含300多万条记录和1000多万个嵌套元素的大型XML文件

    当然,我使用的是xmltextReader,使用多种优化技巧和技巧,解析时间从最初的90秒缩短到40秒左右。

    但我想进一步节省处理时间,因此下面的问题

    相当多的元素是xs:boolean类型的,数据提供程序总是将值表示为“true”或“false”-从不“1”或“0”

    对于这种情况,我最早的代码是:

    if (xmlTextReader.Value == "true")
    {
        bool subtitled = true;
    }
    

    我进一步优化到:

    if (string.Equals(xmlTextReader.Value, "true", StringComparison.OrdinalIgnoreCase))
    {
        bool subtitled = true;
    }
    

    我想知道下面是不是最快(因为它是“对”还是“错”)?

    if (xtr.value.length == 4)
    {
        bool subtitled = true;
    }
    
    7 回复  |  直到 15 年前
        1
  •  7
  •   Giuseppe Accaputo    15 年前

    是的,它更快,因为您只比较一个值,即字符串的长度。

    通过比较两个字符串,可以比较每个字符,只要两个字符相同。所以如果你找到一个匹配的字符串 "true" ,在谓词计算为 true .

    这个解决方案唯一的问题是,如果有一天价值将从 让我们说 1 你会在这里遇到问题的。

        2
  •  4
  •   Alex Reitbort    15 年前

    比较长度会更快,但可读性较差。我不会使用它,除非我分析代码的性能并得出结论,我需要这种优化。

        3
  •  3
  •   Øyvind Skaar    15 年前

    把第一个字比作“T”怎么样?

    应该(也许:)比比较整个字符串更快。

        4
  •  2
  •   Patrick    15 年前

    测量长度几乎总是更快。也就是说,除非这是一个微观优化的实验,否则我只关注使代码可读并传递正确的语义。

    您也可以使用以下方法尝试类似的操作:

    Boolean.TryParse(xmlTextReader.Value, out subtitled)
    

    我知道这与你的问题无关,但我想我还是会把它扔到一边。

        5
  •  0
  •   gkrogers    15 年前

    你不能写一个单元测试吗?运行每个场景(例如1000次)并比较日期时间。

        6
  •  0
  •   tia    15 年前

    如果您知道它是“真”或“假”,那么最后一个片段必须是最快的。

    无论如何,你也可以写:

    bool subtitled = (xtr.Value.length == 4);
    

    那应该更快。

        7
  •  -2
  •   Dmitry Karpezo    15 年前

    在.NET中,字符串比较和分析非常缓慢,我建议避免在.NET中大量使用字符串分析/比较。

    如果您被迫这样做——请使用高度优化的非托管代码或不安全代码,并使用并行性。

    恕我直言。