日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 BenchmarkDotnet 测试代码性能

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 BenchmarkDotnet 测试代码性能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先來點題外話,清明節前把工作辭了(去 tm 的垃圾團隊,各種拉幫結派、勾心斗角)。這次找工作就得慢慢找了,不能急了,希望能找到個好團隊,好崗位吧。順便這段時間也算是比較閑,也能學習一下和填掉手上的坑。

說實話好久沒寫博客了,一個是手上的工作確實忙,第二個是還有各種各樣的坑。寫本文的原因也是因為手上的一個坑——ImageEx,WPF/UWP 上的圖片緩存控件。?

在我寫的這個圖片緩存控件中,其中有一個地方就是要根據圖片的 url 地址,然后來存儲或者獲取本地的圖片文件的。但是呢,我們不可能把 url 當作本地文件的文件名的,一個是可能包含非法字符(如斜杠),另一個是長度可能超出限制。想了一下,那就只能用哈希(hash)來解決了,其中 MD5 和 SHA1 兩種算法我覺得都可以解決這個問題。但問題是,哪一個更好、更快呢?傳統經驗告訴我是 MD5,但是我覺得還是有必要手動實踐一下,畢竟沒有 100% 的把握。

先編寫出如下的代碼:

public static class HashHelper

{

? ? public static string GetMD5(string input)

? ? {

? ? ? ? if (input == null)

? ? ? ? {

? ? ? ? ? ? throw new ArgumentNullException(nameof(input));

? ? ? ? }


? ? ? ? using (var md5 = MD5.Create())

? ? ? ? {

? ? ? ? ? ? var buffer = Encoding.UTF8.GetBytes(input);

? ? ? ? ? ? var hashResult = md5.ComputeHash(buffer);

? ? ? ? ? ? return BitConverter.ToString(hashResult).Replace("-", string.Empty);

? ? ? ? }

? ? }


? ? public static string GetSHA1(string input)

? ? {

? ? ? ? if (input == null)

? ? ? ? {

? ? ? ? ? ? throw new ArgumentNullException(nameof(input));

? ? ? ? }


? ? ? ? using (var sha1 = SHA1.Create())

? ? ? ? {

? ? ? ? ? ? var buffer = Encoding.UTF8.GetBytes(input);

? ? ? ? ? ? var hashResult = sha1.ComputeHash(buffer);

? ? ? ? ? ? return BitConverter.ToString(hashResult).Replace("-", string.Empty);

? ? ? ? }

? ? }

}

作用是輸入一個字符串,輸出一個哈希后的字符串。?

建立一個 .net core 的控制臺項目,我就叫 TestBenchmarkDotnet。

然后安裝 nuget 包,BenchmarkDotnet。

安裝完成后編寫如下代碼:

public class TestContext

{

? ? [Benchmark]

? ? public void TestMD5()

? ? {

? ? ? ? HashHelper.GetMD5("https://www.baidu.com/img/bd_logo1.png");

? ? }


? ? [Benchmark]

? ? public void TestSHA1()

? ? {

? ? ? ? HashHelper.GetSHA1("https://www.baidu.com/img/bd_logo1.png");

? ? }

}

然后修改 Main 方法:

public class Program

{

? ? public static void Main(string[] args)

? ? {

? ? ? ? Summary summary = BenchmarkRunner.Run<TestContext>();

? ? ? ? Console.ReadLine();

? ? }

}


最后將 Debug 調成 Release 模式,不調試啟動。

稍微等待一會兒就會出現結果了。

結論是 MD5 確實比 SHA1 快。

另外由于這是在 .net core 下的測試結果,而 WPF 是跑在 .net framework 下的,那么是否結果可能不一樣呢?

Benchmark 支持多個 .net 環境的性能測試(.net framework, net core, mono)。

修改 TestContext 類的代碼:

[ClrJob, CoreJob]

public class TestContext

{

? ? [Benchmark]

? ? public void TestMD5()

? ? {

? ? ? ? HashHelper.GetMD5("https://www.baidu.com/img/bd_logo1.png");

? ? }


? ? [Benchmark]

? ? public void TestSHA1()

? ? {

? ? ? ? HashHelper.GetSHA1("https://www.baidu.com/img/bd_logo1.png");

? ? }

}

添加了 ClrJob 和 CoreJob 兩個標簽

然后修改項目的 csproj 文件

<TargetFramework>netcoreapp2.0</TargetFramework>

一行改為

<TargetFrameworks>netcoreapp2.0;net471</TargetFrameworks>

回到 VS 重新編譯,還原 nuget 包。

不調試啟動。稍等片刻。

可見在 .net framework 環境下,仍然是 MD5 比 SHA1 快的。而且可以看見 .net core 比 .net framework 環境下快了很多。

另外在輸出目錄下,BenchmarkDotnet 會輸出性能測試結果文件:

打開 html 版本后看到的跟剛才控制臺的是一樣的

原文地址?http://www.cnblogs.com/h82258652/p/8748345.html


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的使用 BenchmarkDotnet 测试代码性能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。