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