<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .net core中你的MD5用對了嗎?

      本文的項目環(huán)境為 .net 6.0 (.net 5.0 以上都支持)

      在 .net 中獲取字符串的 MD5 相信是非常容易的事情吧, 但是隨便在網上搜一搜發(fā)現(xiàn)流傳的版本還不少呢,比如:

      1. StringBuilder 版本(應該算是官方版本了,使用的人最多,我發(fā)現(xiàn)在 ABP 中也是使用的這個)

      2. BitConverter 版本

      3. StringConcat 版本 (字符串拼接,用的人很少,估計都知道性能不好)

      但是它們是否是最佳實現(xiàn)? 我們來測試一下

      StringBuilder 版本

      public static string Md5_StringBuilder(string input)
      {
          using var md5 = MD5.Create();
          var inputBytes = Encoding.UTF8.GetBytes(input);
          var hashBytes = md5.ComputeHash(inputBytes);
          var sb = new StringBuilder();
          foreach (var hashByte in hashBytes)
          {
              sb.Append(hashByte.ToString("X2"));
          }
          return sb.ToString();
      }
      

      BitConverter 版本

      public static string Md5_BitConverter(string input)
      {
          using var md5 = MD5.Create();
          var inputBytes = Encoding.UTF8.GetBytes(input);
          var hashBytes = md5.ComputeHash(inputBytes);
          return BitConverter.ToString(hashBytes).Replace("-", "");
      }
      

      StringConcat 版本

      public static string Md5_StringConcat(string input)
      {
          using var md5 = MD5.Create();
          var inputBytes = Encoding.UTF8.GetBytes(input);
          var hashBytes = md5.ComputeHash(inputBytes);
          var output = string.Empty;
          foreach (var hashByte in hashBytes)
          {
              output += hashByte.ToString("X2");
          }
          return output;
      }
      

      性能對比

      先上我測試得到的數(shù)據(jù)(本機配置: 4 核 8 線程, 測試結果可能不一致)

      image

      Benchmark

      image

      看結果,的確是字符串拼接性能最差,但是 StringBuilder 好像也不是很高效啊,那個什么 Static 是啥玩意,怎么性能這么好,相對于 StringBuilder, 單線程性能提高了 3 倍, 多線性提高了 5 倍???

      沒錯,這就是我要說的, 從 .net 5.0 開始提供了 2 個非常高效的方法

      • Convert.ToHexString
      • MD5.HashData

      Convert.ToHexString 實例版本

      public static string MD5_HexConvert_Instance(string input)
      {
          using var md5 = MD5.Create();
          var inputBytes = Encoding.UTF8.GetBytes(input);
          var hashBytes = md5.ComputeHash(inputBytes);
          return Convert.ToHexString(hashBytes);
      }
      

      MD5.HashData 靜態(tài)版本(強烈建議)

      public static string MD5_HexConvert_Static(string input)
      {
          var inputBytes = Encoding.UTF8.GetBytes(input);
          var hashBytes = MD5.HashData(inputBytes);
          return Convert.ToHexString(hashBytes);
      }
      

      總結

      • 強烈建議 使用 MD5.HashData + Convert.ToHexString, 代碼性能最高,也最簡潔,只有 3 行

      • 一定不要 忘記釋放 MD5,我看網上很多在使用實例版本 MD5.Create() 后都沒有 Dispose, 這會導致 內存泄漏!!!

      最后放上我的完整的測試代碼

      using BenchmarkDotNet.Attributes;
      using BenchmarkDotNet.Jobs;
      using BenchmarkDotNet.Running;
      using System.Text;
      using System.Security.Cryptography;
      
      
      namespace ConsoleTest;
      
      [SimpleJob(RuntimeMoniker.Net60)]
      [MemoryDiagnoser(true)]
      public class MD5_BenchMarks
      {
          [Params(10_0000)]
          public int Size { get; set; }
      
          [Benchmark]
          [Arguments("123456")]
          public string Md5_StringBuilder(string input)
          {
              using var md5 = MD5.Create();
              var inputBytes = Encoding.UTF8.GetBytes(input);
              var hashBytes = md5.ComputeHash(inputBytes);
              var sb = new StringBuilder();
              foreach (var hashByte in hashBytes)
              {
                  sb.Append(hashByte.ToString("X2"));
              }
              return sb.ToString();
          }
      
          [Benchmark]
          [Arguments("123456")]
          public string Md5_StringConcat(string input)
          {
              using var md5 = MD5.Create();
              var inputBytes = Encoding.UTF8.GetBytes(input);
              var hashBytes = md5.ComputeHash(inputBytes);
              var output = string.Empty;
              foreach (var hashByte in hashBytes)
              {
                  output += hashByte.ToString("X2");
              }
              return output;
          }
      
          [Benchmark]
          [Arguments("123456")]
          public string Md5_BitConverter(string input)
          {
              using var md5 = MD5.Create();
              var inputBytes = Encoding.UTF8.GetBytes(input);
              var hashBytes = md5.ComputeHash(inputBytes);
              return BitConverter.ToString(hashBytes).Replace("-", "");
          }
      
          [Benchmark]
          [Arguments("123456")]
          public string MD5_HexConvert_Instance(string input)
          {
              using var md5 = MD5.Create();
              var inputBytes = Encoding.UTF8.GetBytes(input);
              var hashBytes = md5.ComputeHash(inputBytes);
              return Convert.ToHexString(hashBytes);
          }
      
          [Benchmark]
          [Arguments("123456")]
          public string MD5_HexConvert_Static(string input)
          {
              var inputBytes = Encoding.UTF8.GetBytes(input);
              var hashBytes = MD5.HashData(inputBytes);
              return Convert.ToHexString(hashBytes);
          }
      }
      
      class Program
      {
          static void Main()
          {
              BenchmarkRunner.Run(typeof(MD5_BenchMarks));
      
              Console.ReadKey();
          }
      }
      
      
      
      posted @ 2023-10-26 17:45  Broadm  閱讀(3200)  評論(10)    收藏  舉報
      主站蜘蛛池模板: 国产超碰人人做人人爱ⅴa| 99久久无色码中文字幕| 永久免费无码国产| 亚洲最大成人免费av| 国产精品久久久久久久久久直播| 无码人妻丝袜在线视频| 欧美z0zo人禽交另类视频| 亚洲精品麻豆一区二区| 性XXXX视频播放免费直播| 国产成年码AV片在线观看| 日韩精品一区二区三区在线观看| 欧美国产成人久久精品| 116美女极品a级毛片| 国产成人综合欧美精品久久| 亚洲欧美在线观看| 一区二区亚洲精品国产精| 人妻在线无码一区二区三区| 成人午夜免费无码视频在线观看 | 国产亚洲精品福利在线无卡一| 日本道播放一区二区三区| 日本一卡2卡3卡四卡精品网站| 麻豆久久久9性大片| 国产精品国产高清国产专区| 国产成人一区二区三区视频免费 | 日韩高清在线亚洲专区国产| 蜜桃久久精品成人无码av| 国产精品综合av一区二区国产馆| 日本一区二区精品色超碰| 伊人无码精品久久一区二区| 亚洲男女羞羞无遮挡久久丫| av综合亚洲一区二区| 国产偷自视频区视频| 日本a在线播放| 国语偷拍视频一区二区三区| 久久久无码精品亚洲日韩蜜臀浪潮| 激情综合网五月婷婷| 高清日韩一区二区三区视频| 成人国产精品中文字幕| 欧美人与动牲猛交A欧美精品 | bt天堂新版中文在线| 国产一区二区三区无遮挡|