c# – 其中一个for循环比另一个更快吗?

for (var keyValue = 0; keyValue < dwhSessionDto.KeyValues.Count; keyValue++)
{...}


var count = dwhSessionDto.KeyValues.Count;
for (var keyValue = 0; keyValue < count; keyValue++)
{...}

我知道两者之间存在差异,但其中一种比另一种更快?我认为第二个更快.

是的,第一个版本要慢得多.毕竟,我假设你正在处理这样的类型:

public class SlowCountProvider
{
    public int Count
    {
        get
        {
            Thread.Sleep(1000);
            return 10;
        }
    }
}

public class KeyValuesWithSlowCountProvider
{
    public SlowCountProvider KeyValues
    {
        get { return new SlowCountProvider(); }
    }
}

在这里,你的第一个循环需要大约10秒,而你的第二个循环需要大约1秒.

当然,您可能会认为您使用此代码的假设是不合理的 – 但我的观点是正确的答案将取决于所涉及的类型,而问题并未说明这些类型是什么.

现在,如果你实际上正在处理一个访问KeyValues和Count很便宜的类型(这很可能),我不希望有太大的区别.请注意,我几乎总是喜欢尽可能使用foreach:

foreach (var pair in dwhSessionDto.KeyValues)
{
    // Use pair here
}

这样你就不需要计算了.但是,你还没有说过你在循环中想做什么. (提示:获得更多有用的答案,provide more information.)

相关文章
相关标签/搜索