【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

 

posted @ 2020-10-31 00:00  粽先生  阅读(172)  评论(0编辑  收藏  举报