我有這個巨大的json文件整齊地以字符「[\ r \ n」開始並以「]」結尾。我有這樣一段代碼:首先在IEnumerable中跳過,然後繼續執行
foreach (var line in File.ReadLines(@"d:\wikipedia\wikipedia.json").Skip(1))
{
if (line[0] == ']') break;
// Do stuff
}
我想知道,什麼是最好的性能,明智的,什麼樣的機器代碼將是最優化的問候多少個時鐘週期和內存,如果我要被消耗將上面的代碼與我用「continue」代替「break」的代碼進行比較,或者將這兩段代碼編譯爲相同的MSIL和機器代碼?如果你知道答案,請解釋你是如何得出你的結論的?我真的很想知道。
編輯:在關閉這個無意義的代碼之前,請考慮這段代碼等同於上面的代碼,並且認爲當代碼路徑是平坦的並且不會以很多方式分叉時,c#編譯器會進行優化,以下示例爲CPU生成相同的工作量?
IEnumerable<char> text = new[] {'[', 'a', 'b', 'c', ']'};
foreach (var c in text.Skip(1))
{
if (c == ']') break;
// Do stuff
}
foreach (var c in text.Skip(1))
{
if (c == ']') continue;
// Do stuff
}
foreach (var c in text.Skip(1))
{
if (c != ']')
{
// Do stuff
}
}
foreach (var c in text.Skip(1))
{
if (c != ']')
{
// Do stuff
}
}
foreach (var c in text.Skip(1))
{
if (c != ']')
{
// Do stuff
}
else
{
break;
}
}
EDIT2:這裏是把它的另一種方式:什麼是跳過一個IEnumerable的第一個和最後一個項目的最漂亮的方式,同時還推遲執行,直到//做的東西?
最好的選擇是使用JSON解析器而不是做這個自我。 – HimBromBeere
你問如何解析JSON?還是你問如何基準代碼? – mason
我無法做到這一點,該文件太大,但我使用牛頓軟件來解析各條線。 – Marcus