为什么C#不能简单地翻译为最佳可用选项?

时间:2018-04-12 09:34:38

标签: c# performance compilation

我想知道2个完全相同的代码和平如何才能在性能上有所不同。

我不知道是否仍然如此,但我知道for循环曾经比同等foreach更快。

Linq也是如此。 我不太明白为什么会这样呢

for (int i = 0; i < 100000; i++)
{
    ListDec = new List<decimal>();
    foreach (string s in myStrings)
        ListDec.Add(decimal.Parse(s));
}

比其他人快6%到8%

for (int i = 0; i < 100000; i++)
    ListDec = myStrings.Select(decimal.Parse).ToList();

可能我不明白编译器是如何工作的,但直觉上我倾向于问自己是否设计了一种语言,而事实证明,一个元素一直比它的等价物慢一些,为什么你不这样做呢?您的语言编译器会在较快的编译器中转换较慢的编译器吗?

编译器可以简单地在等效的foreach循环中转换for循环,并且在它的vanilla等价物中使用linq表达式。这会使性能差异几乎不可能,因为最快的选择总是在执行时被选中。虽然编码人员可以选择他喜欢的那个而不必关心性能。 听起来像是一个理想的世界,但由于我们在微软的朋友并不是那种倾销者,所以必定会有一些我不知道的东西。

0 个答案:

没有答案