Добавить
Уведомления

Raw string literal'in performans'a etkisi [C# 11]

"C# 11 ile gelmesi beklenen Raw String Literal" videomdan sonra bir izleyicim bu literal'in performansa etkisinin olup olmadığını sormuştu. #csharp #csharp11 Öncelikle raw literal ve regular literal ile 2 tane eşlenik string tanımlayalım; var s = """ { "name": "Soner", "lastname": "Gönül" } """; var s2 = "{\r\n \"name\": \"Soner\",\r\n \"lastname\": \"Gönül\"\r\n}"; MSIL (Microsoft Intermediate Language) koduna baktığımızda; IL_0001: ldstr "{\r\n \"name\": \"Soner\",\r\n \"lastname\": \"Gönül\"\r\n}" IL_0006: stloc.0 IL_0007: ldstr "{\r\n \"name\": \"Soner\",\r\n \"lastname\": \"Gönül\"\r\n}" IL_000c: stloc.1 yani aynı string'ler evaluation stack'e pop load ediliyor. JIT Assembly koduna da baktığımızda; L0020: mov eax, [0x88aa934] L0026: mov [ebp-8], eax L0029: mov eax, [0x88aa934] L002f: mov [ebp-0xc], eax Burada gördüğünüz gibi eax register'ı içerisine memory'deki aynı adresi (0x88aa934) kopyalıyor. Bu da string interning'in bize sağladığı bir özellik. Aynı string objeleri için memory'de sadece tek bir string objesi oluşturarak memory optimizasyonu sağlanıyor. Özet: Farklı string literaller, biz programcılar için compiler içerisinde daha string'leri daha rahat kullanmamızı ve okunabilirliği arttırmayı sağlayan yapılardır genelde. Performans'a etkileri genellikle yoktur. Kaynak: https://sharplab.io #v2:EYLgtghglgdgNAExAagD4AEBMBGAsAKHQGYACLEgYRIG8CT6zT0AWEgWQAoBKEuh2/AyEkAbhABOJAM4kAvCQBESvsNX8VazfQUwIYAKYKQigMoB7GPvEK4GrWoUAbCFIAuug0cUBxAG8wAH8cFO3sSAF9Q+yUFAG4osPoEsUkpTDlFagAdcSyYISydPX1C40LzS1ybHLyCpxd3YtKSQr9Ax0KamHC43kEGSPxwoA=== *** Sosyal Medya ? Twitter'dan takip edin: https://twitter.com/sonergonul ? Twitch'ten takip edin: https://www.twitch.tv/sonergonul ? Discord kanalımız: https://discord.gg/VXZQH3U ? Quora'dan takip edin: https://www.quora.com/profile/Soner-Gonul ? Instagram'dan takip edin: https://www.instagram.com/sonergonul/ Destek ? KATIL: https://www.youtube.com/channel/UCFTgwm0NW2Ay2c422bcu4xg/join ? ByNoGame: https://www.bynogame.com/destekle/sonergonul

12+
16 просмотров
2 года назад
12+
16 просмотров
2 года назад

"C# 11 ile gelmesi beklenen Raw String Literal" videomdan sonra bir izleyicim bu literal'in performansa etkisinin olup olmadığını sormuştu. #csharp #csharp11 Öncelikle raw literal ve regular literal ile 2 tane eşlenik string tanımlayalım; var s = """ { "name": "Soner", "lastname": "Gönül" } """; var s2 = "{\r\n \"name\": \"Soner\",\r\n \"lastname\": \"Gönül\"\r\n}"; MSIL (Microsoft Intermediate Language) koduna baktığımızda; IL_0001: ldstr "{\r\n \"name\": \"Soner\",\r\n \"lastname\": \"Gönül\"\r\n}" IL_0006: stloc.0 IL_0007: ldstr "{\r\n \"name\": \"Soner\",\r\n \"lastname\": \"Gönül\"\r\n}" IL_000c: stloc.1 yani aynı string'ler evaluation stack'e pop load ediliyor. JIT Assembly koduna da baktığımızda; L0020: mov eax, [0x88aa934] L0026: mov [ebp-8], eax L0029: mov eax, [0x88aa934] L002f: mov [ebp-0xc], eax Burada gördüğünüz gibi eax register'ı içerisine memory'deki aynı adresi (0x88aa934) kopyalıyor. Bu da string interning'in bize sağladığı bir özellik. Aynı string objeleri için memory'de sadece tek bir string objesi oluşturarak memory optimizasyonu sağlanıyor. Özet: Farklı string literaller, biz programcılar için compiler içerisinde daha string'leri daha rahat kullanmamızı ve okunabilirliği arttırmayı sağlayan yapılardır genelde. Performans'a etkileri genellikle yoktur. Kaynak: https://sharplab.io #v2:EYLgtghglgdgNAExAagD4AEBMBGAsAKHQGYACLEgYRIG8CT6zT0AWEgWQAoBKEuh2/AyEkAbhABOJAM4kAvCQBESvsNX8VazfQUwIYAKYKQigMoB7GPvEK4GrWoUAbCFIAuug0cUBxAG8wAH8cFO3sSAF9Q+yUFAG4osPoEsUkpTDlFagAdcSyYISydPX1C40LzS1ybHLyCpxd3YtKSQr9Ax0KamHC43kEGSPxwoA=== *** Sosyal Medya ? Twitter'dan takip edin: https://twitter.com/sonergonul ? Twitch'ten takip edin: https://www.twitch.tv/sonergonul ? Discord kanalımız: https://discord.gg/VXZQH3U ? Quora'dan takip edin: https://www.quora.com/profile/Soner-Gonul ? Instagram'dan takip edin: https://www.instagram.com/sonergonul/ Destek ? KATIL: https://www.youtube.com/channel/UCFTgwm0NW2Ay2c422bcu4xg/join ? ByNoGame: https://www.bynogame.com/destekle/sonergonul

, чтобы оставлять комментарии