for语句嵌套循坏性能的剖析
日常工作中,处理数据难免会遇到遍历,for循环可能是我们用的比较多的了。本节就来探讨下for语句嵌套循环的性能,猜想下面两个语句的性能。
语句1
for ( i= ; i < ; i++)
{
for (j =; j < ; j++)
{
expression;
}
}
语句2
for ( i= ; i < ; i++)
{
for (j =; j < ; j++)
{
expression;
}
}
乍一看,感觉两个嵌套循环执行的次数都是一样的,那么他们的时间复杂度是一样的吗?让我们来分析下,语句1外层循环执行了1000000次,内层循环执行了1000000*100次,而语句2外层循环执行了100次,内层循环也执行了1000000*100次。那么,既然内层执行的次数都一样,外层是不是执行的越少越好呢?让我们写代码认证下。
验证代码
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
// expression;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); sw.Reset(); sw.Start();
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
// expression;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
}
验证截图

得出结论,对于for语句的嵌套循环,总循环次数相等,外层循环越小越好。个人拙见,工作中具体情况具体对待...
补充总结(2月3日)
上文的描述给大家展现的都是现象,并没有告诉大家事物的本质。(@Sunday*)Sunday*告诉我说“是因为减少了对int j=0的赋值操作,这些会有一定的性能上的消耗,但这种优化不是本质上的性能提升!”,于是引发了我更深层次的思考。其实,控制外层循环次数越小,我们可以发现i自增的次数少了,i<100的判断次数少了,以及内层循环中的int j=0赋值的次数也少了,自然而然性能就得到了提升。
Sunday*说的很对:使用for应尽量避免里面创建对象,减少循环次数,这样才能达到优化;而我得出的结论:对于for语句的嵌套循环,总循环次数相等,外层循环越小越好。两者都是正确的。代码是死的,人是活的,人得灵活驾驭代码,具体情况具体对待。
最后,我不否认这种优化对性能提升不了多少,但是,假如我遇到了本文所提的情况,我必须得本能得写出最优代码,这也是我研究的目的所在。
for语句嵌套循坏性能的剖析的更多相关文章
- 1、python简介-变量-注释-数据类型-用户交互-if语句-while循坏
一. 计算机是什么 基本组成: 主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5, 主频(海盗船,玩家国度) 显卡: ...
- 流程控制之while循坏
流程控制之while循坏 一.语法 循环就是一个重复的过程,我们人需要重复干一个活,人岂不是要累死啊,而且还是那么-..的枯燥乏味,向我这样要的小年轻,不骚里骚气的行吗?那岂不是白白流浪了这么多年头, ...
- python while循坏和for循坏
while循坏 while 条件: 条件成立,执行循坏体(注意,while循坏必须有结束条件,不然会进入死循坏) 简单做个演示: # -*- coding:utf-8 -*- # Author:覃振鸿 ...
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- java(5)循坏结构
一. while循环 1.循环的优点? 减少重复代码的编写:程序会更加的简洁 2.语法 while(表达式){ // 1.表达式是[循环条件],结果必须是boolean类型 //2.{}中的代码,即[ ...
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
JAVA之旅(二)--if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结 JAVA的思想真的很重要,所以要专心的学-- ...
- MySQL 笔记整理(18) --为什么这些SQL语句逻辑相同,性能却差异巨大?
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 18) --为什么这些SQL语句逻辑相同,性能却差异巨大? 本篇我们以三 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- Python3 循环_break和continue语句及循环中的else子句
break和continue语句及循环中的else子句break语句可以跳出for和while的循环体.如果你从for或while循环中终止,任何对应的循环else块将不执行. continue语句被 ...
随机推荐
- java htmlunit 抓取网页数据
WebClient webClient=new WebClient(BrowserVersion.CHROME); webClient.setJavaScriptTimeout(5000); webC ...
- HttpClient 与 HtmlParser 简介 转载
转载地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ 本小结简单的介绍一下 HttpClinet 和 HtmlPar ...
- 使用netty4.x客户端接收较大数据量报文时发生的读取不完整bug修复记录
1.先说问题 背景:服务是运行在Linux上的安全网关提供的,TCP协议发送 通过二进制编码的xml字符串 报文,报文头的第一个字段是int类型的表示字节序标记,第二个字段是int类型的表示整个报文长 ...
- Java进行post和get传参数
http://www.cnblogs.com/zhuawang/archive/2012/12/08/2809380.html get和post方法 import java.io.BufferedRe ...
- Concurrency vs. Parallelism
http://getakka.net/docs/concepts/terminology Terminology and Concepts In this chapter we attempt to ...
- 介绍一个可以将Expression表达式树解析成Transact-SQL的项目Expression2Sql
一.Expression2Sql介绍 Expression2Sql是一个可以将Expression表达式树解析成Transact-SQL的项目.简单易用,几分钟即可上手使用,因为博主在设计Expres ...
- ChartControl 折线图 柱状图
添加折线图(柱状图) 拖动ChartControl到Form上 在Series Collection中添加Line(或Bar) DevExpress.XtraCharts.Series series1 ...
- hihoCoder 1427 : What a Simple Research(大㵘研究)
hihoCoder #1427 : What a Simple Research(大㵘研究) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 ...
- unreal 自定义 Slate Style Sets
搜集到的最有价值的一篇教学,按照作者的方法尝试中遇到了一些问题.[感谢这位作者!] 网址:https://wiki.unrealengine.com/Slate_Style_Sets_Part_2 在 ...
- 用:hover伪类代替js的hover事件
制作二级菜单要实现鼠标移动上去显示子菜单,鼠标移出子菜单隐藏,或者其他类似需求的地方,首先我会想到用jquery的hover事件来实现,如: $(".nav").hover(fun ...