首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从for循环和if语句中的局部变量或对象中读取值?

从for循环和if语句中的局部变量或对象中读取值?
EN

Stack Overflow用户
提问于 2011-11-22 21:05:03
回答 4查看 125关注 0票数 2

在C#的for循环中,以下哪种码块的性能最好?还是没有区别呢?区别在于条件是保存在局部变量中还是直接从对象中读取。

选项1

代码语言:javascript
复制
float maxDepth = 0;
int maxnumber = 0;

for (int i = 0; i < defects.Total; i++)
{
    if (defects[i].Depth > maxDepth)
    {
        maxDepth = defects[i].Depth;
        maxnumber = i;
    }
}

选项2

代码语言:javascript
复制
float maxDepth = 0;
int maxnumber = 0

int defectNumber = defects.Total;
for (int i = 0; i < defectNumber; i++)
{
    if (defects[i].Depth > maxDepth)
    {
        maxDepth = defects[i].Depth;
        maxnumber = i;
    }
}

如果这个问题被问了很多次,我很抱歉,但我在任何地方都找不到它。

安德斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-22 21:13:38

对于所有这样的问题,您可以像这样使用System.Diagnostics.Stopwatch

代码语言:javascript
复制
var stopwatch = new Stopwatch();
stopwatch.Start();

float maxDepth = 0; 
int maxnumber = 0;  
for (int i = 0; i < defects.Total; i++) 
{    
    if (defects[i].Depth > maxDepth)     
    {         
        maxDepth = defects[i].Depth;         
        maxnumber = i;     
    } 
} 

stopwatch.Stop();
Debug.WriteLine("Elapesed time for method 1: {0} msec.", stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
stopwatch.Start();

maxDepth = 0; 
maxnumber = 0;  
int defectNumber = defects.Total; 
for (int i = 0; i < defectNumber; i++)     
{    
    if (defects[i].Depth > maxDepth)     
    {         
        maxDepth = defects[i].Depth;         
        maxnumber = i;     
    } 
} 
stopwatch.Stop();
Debug.WriteLine("Elapesed time for method 2: {0} msec.", stopwatch.ElapsedMilliseconds);

然后你就得到了确切的信息。(最好的方法是多次运行并使用平均值)

票数 2
EN

Stack Overflow用户

发布于 2011-11-22 21:14:19

您的第一个示例必须在循环中的每一次传递中都保持解析defects.Total。一般来说,这将比在原生int中拥有一个值要慢。我不了解C#的内部工作原理,所以我不能确定哪种方法更快,或者快多少,但总的来说,我会说第二种方法更好。

票数 0
EN

Stack Overflow用户

发布于 2011-11-22 21:15:38

选项2将使用更多的少量内存,但由于一个较少的取消引用步骤,它将会更快一点。

无论哪种方式都不会有太大的区别,除非你是通过迭代的billions+来计算的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8227289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档