-4
考慮下面的代碼。 's'被分成兩個不同的數組。爲什麼不分割優化?
string s = "1,2,3";
string[] arr = s.Split(',');
string[] arr2 = s.Split(',');
foreach (..)
{ // do something
}
在發佈模式下編譯時,IL看起來像這樣,所以Split實際上被調用了兩次。有沒有一個原因,爲什麼沒有優化?
IL_0008: newarr [mscorlib]System.Char
IL_000d: stloc.s CS$0$0000
IL_000f: ldloc.s CS$0$0000
IL_0011: ldc.i4.0
IL_0012: ldc.i4.s 44
IL_0014: stelem.i2
IL_0015: ldloc.s CS$0$0000
IL_0017: callvirt instance string[] [mscorlib]System.String::Split(char[])
IL_001c: stloc.1
IL_001d: ldloc.0
IL_001e: ldc.i4.1
IL_001f: newarr [mscorlib]System.Char
IL_0024: stloc.s CS$0$0001
IL_0026: ldloc.s CS$0$0001
IL_0028: ldc.i4.0
IL_0029: ldc.i4.s 44
IL_002b: stelem.i2
IL_002c: ldloc.s CS$0$0001
IL_002e: callvirt instance string[] [mscorlib]System.String::Split(char[])
你爲什麼不自己優化代碼? – Raptor
你爲兩個不同的數組調用'Split'兩次,所以編譯器調用'Split'兩次。我不明白你的問題。你在等什麼樣的優化? –
親愛的,如果你爲同一個字符串調用兩次Split,那麼編譯器的錯誤是什麼。 –