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

  • 相关阅读:
    navicat执行大容量的.sql文件时的设置
    unity3d的四元数 Quaternion
    Unity运行时刻资源管理
    unity3d 加密资源并缓存加载
    unity3d webplayer 16:9 居中显示模板
    quaternion*Vector3的新理解
    PoolManager
    网上关于碰撞的资料
    游戏美术:色彩原理
    unity3d下载Obb分包文件
  • 原文地址:https://www.cnblogs.com/straycats/p/13904904.html
Copyright © 2011-2022 走看看