前言
群里有人在說(shuō)int轉(zhuǎn)string,兩種方式那種要好一些.當(dāng)時(shí)心理就覺(jué)得調(diào)用ToString這種方式要一些.至于為什么直接調(diào)用類型ToString函數(shù)會(huì)好一些卻說(shuō)不出個(gè)所以然來(lái).
下面看一下這兩種方式:
123.ToString()123 + ""當(dāng)我們?cè)u(píng)測(cè)代碼性能好不好的時(shí)候,是不能憑直覺(jué)去斷言的,是需要工具測(cè)試代碼的,在.Net下BenchmarkDotNet就是很好的工具.
[Benchmark] public string ToString12345() => 12345.ToString();[Benchmark]public string ToString54321() => 12345 + "";
測(cè)試結(jié)果:
在c#類型轉(zhuǎn)字符串,直接調(diào)用ToString性能要好一些
根據(jù)性能測(cè)試,兩種用法性能在同一.Net版本性能相差不大,當(dāng)然在.Net Core 3.1的是int+""性能要好一些.不過(guò)也看出在.Net 5性能改進(jìn)很大.
C#編譯后的代碼:
[Benchmark]public string ToString12345(){ return this.val1.ToString();}[Benchmark]public string ToString54321(){ return this.val2.ToString() ?? "";}
看JIT生成的匯編代碼:
//ToString12345C.ToString12345() L0000: push ebp L0001: mov ebp, esp L0003: sub esp, 0xc L0006: xor eax, eax L0008: mov [ebp-8], eax L000b: mov [ebp-0xc], eax L000e: mov [ebp-4], ecx L0011: cmp dword ptr [0x5fac1a8], 0 L0018: je short L001f L001a: call 0x04326120 L001f: mov dword ptr [ebp-8], 0x3039 L0026: lea ecx, [ebp-8] L0029: call System.Int32.ToString() L002e: mov [ebp-0xc], eax L0031: mov eax, [ebp-0xc] L0034: mov esp, ebp L0036: pop ebp L0037: ret//ToString54321 C.ToString54321() L0000: push ebp L0001: mov ebp, esp L0003: sub esp, 0x10 L0006: xor eax, eax L0008: mov [ebp-8], eax L000b: mov [ebp-0xc], eax L000e: mov [ebp-0x10], eax L0011: mov [ebp-4], ecx L0014: cmp dword ptr [0x5fac1a8], 0 //判斷是否為空 L001b: je short L0022 L001d: call 0x04326120 L0022: mov dword ptr [ebp-8], 0xd431 L0029: lea ecx, [ebp-8] L002c: call System.Int32.ToString() L0031: mov [ebp-0xc], eax L0034: mov eax, [ebp-0xc] L0037: mov [ebp-0x10], eax L003a: cmp dword ptr [ebp-0xc], 0 L003e: jne short L0049 L0040: mov eax, [0x19b42038] L0046: mov [ebp-0x10], eax L0049: mov eax, [ebp-0x10] L004c: mov esp, ebp L004e: pop ebp L004f: ret
從匯編代碼看出,int+""生成匯編代碼,還是加了判斷是否為空,不為空的時(shí)候才會(huì)調(diào)用ToString方法,是比直接調(diào)用ToString多一個(gè)判斷.
.Net 5/6/7 性能基準(zhǔn)測(cè)試對(duì)比(2022.03.26增加)在.Net 6/.Net 7性能基準(zhǔn)測(cè)試
剛才找了一下Int32的ToString源碼,發(fā)現(xiàn)2020年后,就沒(méi)進(jìn)行調(diào)整了.
在.Net 5種 Int32 ToString源碼
個(gè)人能力有限,如果您發(fā)現(xiàn)有什么不對(duì),請(qǐng)私信我
如果您覺(jué)得對(duì)您有用的話,可以點(diǎn)個(gè)贊或者加個(gè)關(guān)注,歡迎大家一起進(jìn)行技術(shù)交流
本文發(fā)布于:2023-02-28 20:12:00,感謝您對(duì)本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/167766255281529.html
版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。
本文word下載地址:整型轉(zhuǎn)字符串(mysql整型轉(zhuǎn)字符串).doc
本文 PDF 下載地址:整型轉(zhuǎn)字符串(mysql整型轉(zhuǎn)字符串).pdf
| 留言與評(píng)論(共有 0 條評(píng)論) |