[英]Does String.Intern method just add a reference to a string to the intern pool or it creates a copy of the string?
[英]Is CIL ldstr replaced with constant reference to the string.Intern during JIT/AOT compilation?
假設我有一個需要優化但同時易於調試的代碼。 因此,我會為我使用的每個值分配一個字符串。 該字符串是否會造成重大性能損失,或者它是否會變成在JIT
/ AOT
編譯期間從string.Intern獲取的常量引用,從而轉換為單個簡單指令?
例:
在IL,它將是ldstr "gazilion lines"
。
是在JIT / AOT編譯過程中變成ldsflda string.InternCache.ID_0000647516166
和const string ID_0000647516166 = "gazilion lines";
添加到string.InternCache
?
是的,我理論上可以查看https://github.com/mono/mono但我不知道如何找到它。
是的,我正在混合使用CIL,C#以及編譯的CIL,但是你明白了。
ldstr
保證是O(1)
嗎?
是的,它是CLR的“實現細節”,但如果以這種方式進行優化,那將是有意義的。
答案很長:是的。 在運行時成為單個MOV reg,imm指令,請務必使用可以向您顯示反匯編的調試器,這樣您就不必擔心元數據令牌和抖動的工作原理。 - 漢斯帕斯特
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.