编译器可以优化字符串上的ToString()吗?

迈克·古思里

我敢肯定,每个人都遇到了喜欢这种ToString()方法的开发人员我们都可能看到了类似于以下内容的代码:

public static bool CompareIfAnyMatchesOrHasEmpty(List<string> list1, List<string> list2)
{
    bool result = false;
    foreach (string item1 in list1)
    {
        foreach (string item2 in list2)
        {
            if (item1.ToString() == item2.ToString())
            {
                result = true;
            }
            if (item1.ToString() == "")
            {
                result = true;
            }
        }
    }
    return result;
}

我想知道的是ToString(),编译器是否可以优化方法(空的,无格式方法)?我的假设是它没有,因为它最初是在上定义的object因此,我提出了第二个问题,关于是否有必要进行清理此类实例的工作?

阿奎那

它肯定可以由编译器优化,但是他们可能没有,因为它是微不足道的。在确定是否值得进行任何优化之前,请先尝试进行一些测试。试试吧!

List<string> strings = Enumerable.Range(1, 10000000).Select(x => Guid.NewGuid().ToString()).ToList();
var sw= Stopwatch.StartNew();

foreach (var str in strings) {
    if (!str.ToString().Equals(str.ToString())) {
        throw new ApplicationException("The world is ending");
    }
}

sw.Stop();
Console.WriteLine("Took: " + sw.Elapsed.TotalMilliseconds);

sw = Stopwatch.StartNew();
foreach (var str in strings) {
    if (!str.Equals(str)) {
        throw new ApplicationException("The world is ending");
    }
}
sw.Stop();
Console.WriteLine("Took: " + sw.Elapsed.TotalMilliseconds);

好的,所以我们处于一个循环中,共有1000万个项目。与非tostring版本相比,tostring(称为两次)版本需要多长时间?

这是我在机器上得到的:

Took: 261.6189 
Took: 231.2615

嗯是的。在1000万次迭代中,我节省了30毫秒的时间。所以...是的,我要说不,不值得。完全没有。

现在,是否应该因为愚蠢而更改代码是的。我可以这样说:“这是不必要的,使我一眼就认为这不是字符串。这需要我动脑筋进行处理,实际上没有任何用处。不要这样做。” 不要从优化的角度争论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编译器可以优化字符串上的ToString()吗?

来自分类Dev

我可以得到编译器应用的优化日志吗?

来自分类Dev

编译器可以优化dynamic_cast吗?

来自分类Dev

编译器可以优化汇编中的函数序言吗?

来自分类Dev

编译器可以优化此代码段吗?

来自分类Dev

编译器可以优化多个相同的函数调用吗

来自分类Dev

编译器可以优化可变长度的循环吗?

来自分类Dev

编译器可以优化离开方法的调用吗?

来自分类Dev

Scala:编译器可以有效地优化常量吗?

来自分类Dev

我可以让编译器优化结构中的函数调用吗?

来自分类Dev

编译器是否针对常量字符串优化Stringbuffer / StringBuilder.append()?

来自分类Dev

F#编译器中的字符串串联优化

来自分类Dev

C#编译器会优化此代码吗?

来自分类Dev

编译器会优化未使用的链接文件吗?

来自分类Dev

编译器会优化集合初始化吗?

来自分类Dev

C#编译器不会优化foreach吗?

来自分类Dev

这是C#编译器完成的优化吗?

来自分类Dev

编译器会优化除法乘法吗

来自分类Dev

模板布尔会被编译器优化吗?

来自分类Dev

从源代码编译器是否可以带来更好的优化?

来自分类Dev

编译器是否可以自动优化我的“ OR”语句?

来自分类Dev

GCC编译器优化:多次使用字符

来自分类Dev

在字符串上使用in循环可以吗?

来自分类Dev

编译器优化问题

来自分类Dev

编译器的优化指标

来自分类Dev

C ++编译器优化可以在范围结束之前清除未使用的数据结构吗?

来自分类Dev

是否可以让编译器将 VC 名称(来自字符串)视为该 VC 类型?

来自分类Dev

在[] byte和字符串之间进行转换或反之亦然时,Go 1.6编译器适用哪些优化?

来自分类Dev

在字符串上调用toString

Related 相关文章

  1. 1

    编译器可以优化字符串上的ToString()吗?

  2. 2

    我可以得到编译器应用的优化日志吗?

  3. 3

    编译器可以优化dynamic_cast吗?

  4. 4

    编译器可以优化汇编中的函数序言吗?

  5. 5

    编译器可以优化此代码段吗?

  6. 6

    编译器可以优化多个相同的函数调用吗

  7. 7

    编译器可以优化可变长度的循环吗?

  8. 8

    编译器可以优化离开方法的调用吗?

  9. 9

    Scala:编译器可以有效地优化常量吗?

  10. 10

    我可以让编译器优化结构中的函数调用吗?

  11. 11

    编译器是否针对常量字符串优化Stringbuffer / StringBuilder.append()?

  12. 12

    F#编译器中的字符串串联优化

  13. 13

    C#编译器会优化此代码吗?

  14. 14

    编译器会优化未使用的链接文件吗?

  15. 15

    编译器会优化集合初始化吗?

  16. 16

    C#编译器不会优化foreach吗?

  17. 17

    这是C#编译器完成的优化吗?

  18. 18

    编译器会优化除法乘法吗

  19. 19

    模板布尔会被编译器优化吗?

  20. 20

    从源代码编译器是否可以带来更好的优化?

  21. 21

    编译器是否可以自动优化我的“ OR”语句?

  22. 22

    GCC编译器优化:多次使用字符

  23. 23

    在字符串上使用in循环可以吗?

  24. 24

    编译器优化问题

  25. 25

    编译器的优化指标

  26. 26

    C ++编译器优化可以在范围结束之前清除未使用的数据结构吗?

  27. 27

    是否可以让编译器将 VC 名称(来自字符串)视为该 VC 类型?

  28. 28

    在[] byte和字符串之间进行转换或反之亦然时,Go 1.6编译器适用哪些优化?

  29. 29

    在字符串上调用toString

热门标签

归档