c# - 这些 for 循环中的一个比另一个更快吗?

标签 c#

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 秒。

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

现在,如果您实际上处理一种类型,其中访问KeyValuesCount 很便宜(很有可能),我不会预计会有很大差异。请注意,我几乎总是喜欢尽可能使用 foreach:

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

这样你就永远不需要计数了。但是,你也没有说你想在循环内做什么。 (提示:要获得更有用的答案,provide more information。)

关于c# - 这些 for 循环中的一个比另一个更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344336/

相关文章:

c# - Ninject:绑定(bind)身份用户管理器

c# - Autofac:注册异步工厂方法

c# - 可以多次重新分配结构变量吗?

c# - 正则表达式 C#

c# - Windows 窗体启动另一个窗体

c# - 无法跟踪实体类型 Model 的实例,因为已经在跟踪另一个具有相同键值 {'Id' } 的实例

c# - 空合并和 Lambda

c# - Identityserver4/OpenId Connect,混合模式, token 刷新失败

c# - 将 3D 点投影到 2D 屏幕坐标

c# tooltip backcolor 和 forecolor 不随 using 方法或其他方式改变