0
我在.net 4.5中有一個簡單的控制檯應用程序。CompilationRelaxations屬性不起作用
public class Program { public static void Main() { string s1 = "s1"; string s2 = "s1"; Console.WriteLine(ReferenceEquals(s1, s2)); } }
這讓因爲字符串實習也是如此。但是,當我將CompilationRelaxations屬性添加到AssemblyInfo文件時,我仍然將它看作是輸出。
[裝配:CompilationRelaxations(CompilationRelaxations.NoStringInterning)
即使添加屬性到我的計劃類似乎並沒有改變輸出。 [CompilationRelaxations(CompilationRelaxations.NoStringInterning)]
將其更改爲.net 4.0應用程序也沒有任何效果。
我錯過了什麼?
這是一個純粹的猜測,但是在實習生有機會在運行時做它的事情之前,編譯器會爲你優化兩個字符串常量。嘗試在一個單獨的文件中添加一個單獨的類,併爲其創建一個函數'public static string s1(){return「s1」;}'。然後從'main'調用該函數,並將結果與''main「'中定義的'」s1「'常量進行比較。我的猜測是,只有在打開實習計劃的情況下,這個比例纔會相等。 – dasblinkenlight
@dasblinkenlight:我不這麼認爲。添加'[MethodImpl(MethodImplOptions.NoOptimization)]'沒有幫助。 –