zoukankan      html  css  js  c++  java
  • c# 测试对比几种对比空串的写法性能

    ===============================================

     2020/10/30_第1次修改                       ccb_warlock

     

    ===============================================

    最近参与了一次笔试中遇到了这么一个题,如下:

    c#中判断变量string a是否为空字符串时(a不为null),下列哪个语法执行最快?
    
    A. a==""
    
    B. string.IsNullOrEmpty(a)
    
    C. a.Length==0
    
    D. a.Equals("")

    虽然猜了一个C,不过我倒是从来没考虑过这个还有执行性能的差异,所以干脆写个例子测试下,结果测试下来确实差异不小。

    由于次数少看不出效果,所以我将循环次数设置成10亿次。

    using System;
    using System.Diagnostics;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void CompareExecutedTime()
            {
                const int total = 1000000000;
                var str = string.Empty;
                var stopwatch = new Stopwatch();
                
                stopwatch.Start();
                for (var i = 0; i < total; i++)
                {
                    if (str == ""){}
                }
                stopwatch.Stop();
                Console.WriteLine($@"str == """" 的耗时: {stopwatch.Elapsed}");
                stopwatch.Reset();
                
                stopwatch.Start();
                for (var i = 0; i < total; i++)
                {
                    if (str == string.Empty){}
                }
                stopwatch.Stop();
                Console.WriteLine($"str == string.Empty 的耗时: {stopwatch.Elapsed}");
                stopwatch.Reset();
                
                stopwatch.Start();
                for (var i = 0; i < total; i++)
                {
                    if (string.IsNullOrEmpty(str)){}
                }
                stopwatch.Stop();
                Console.WriteLine($@"string.IsNullOrEmpty(str) 的耗时: {stopwatch.Elapsed}");
                stopwatch.Reset();
                
                stopwatch.Start();
                for (var i = 0; i < total; i++)
                {
                    if (str.Length == 0){}
                }
                stopwatch.Stop();
                Console.WriteLine($"str.length == 0 的耗时: {stopwatch.Elapsed}:");
                stopwatch.Reset();
                
                stopwatch.Start();
                for (var i = 0; i < total; i++)
                {
                    if (str.Equals("")){}
                }
                stopwatch.Stop();
                Console.WriteLine($@"str.Equals("""") 的耗时: {stopwatch.Elapsed}");
                stopwatch.Reset();
                
                stopwatch.Start();
                for (var i = 0; i < total; i++)
                {
                    if (str.Equals(string.Empty)){}
                }
                stopwatch.Stop();
                Console.WriteLine($@"str.Equals(string.Empty) 的耗时: {stopwatch.Elapsed}");
                stopwatch.Reset();
            }
            
            static void Main(string[] args)
            {
                CompareExecutedTime();
            }
        }
    }

    执行结果如下:

    结论:以string不为空为前提,判断是否为空串确实是.length的性能更优。

    但很多的业务场景我们必须判断string值是否也为null,看结果IsNullOrEmpty()确实还是业务的首选项。

    参考资料:

    1.https://www.cnblogs.com/zhw511006/archive/2009/07/22/1528405.html

    2.https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.stopwatch?view=netcore-3.1

  • 相关阅读:
    Mysql的ONLY_FULL_GROUP_BY
    Redis报错“ OOM command not allowed when used memory > 'maxmemory' ”
    redis发布订阅客户端报错
    使用IDEA远程调试SpringBoot程序
    kafk学习笔记(一)
    Ubuntu中卸载node和npm并重装
    一些常用的类型转换
    一台电脑配置多个GigHub账号
    百度网盘文件直接下载方法(跳过每次需要启动百度网盘下载的方式)
    如何激活IDEA工具,亲测有效
  • 原文地址:https://www.cnblogs.com/straycats/p/13904904.html
Copyright © 2011-2022 走看看