if Vs switch,即生瑜何生亮!

既生瑜,何生亮? 我们知道在STM32 MCU片内的常规定时器【基本定时器、通用定时器、高级定时器】里面,有个ARR寄存器,它负责配置定时器的计数时钟个数,进而决定每个计数周期的时长。【下图是计数器三种计数方式及溢出点的示意图,绿色圆圈表示溢出位置。】对于基本定时器和通用定时器,每次溢出时都可以产生更新事件,该事件可以用来触发中断、触发DMA请求、触发其它外设【ADC/DAC等】或与其它定... 阅读详情

大年初三哩,可惜还要忙活下,真羡慕大家出去走走串门呀!今天敲的代码不是if判断就是switch判断,郁闷三。这微软搞出个if为虾米还再弄出个switch三,听着外边鞭炮声、欢笑声,心已远去,遂小试了下。 

       private const int count = 999999;//比较次数

        protected void Page_Load(object sender, EventArgs e)

        {

            TestIf(3);

            Response.Write("</br>");

            TestSwitch(3);

        }

        /// <summary>

        /// 测试执行if判断count次所消耗时间

        /// </summary>

        /// <param name="param"></param>

        /// <returns></returns>

        private long TestIf(int param)

        {

            long i = 0;

 

            Stopwatch sw = new Stopwatch();//System.Diagnostics.Stopwatch该类用于准确地测量运行时间

            sw.Start();

            for (int j = 0; j < count; j++)

            {

                if (param == 1)

                    i += 1;

                else if (param == 2)

                    i += 2;

                else if (param == 3)

                    i += 3;

            }

            sw.Stop();

            Response.Write("采用If判断执行" + count.ToString() + "次消耗的时间是: " + sw.ElapsedMilliseconds.ToString() + "毫秒");

            return i;

        }

 

        /// <summary>

        /// 测试执行switch判断count次所消耗时间

        /// </summary>

        /// <param name="param"></param>

        /// <returns></returns>

        private long TestSwitch(int param)

        {

            long i = 0;

 

            Stopwatch sw = new Stopwatch();

            sw.Start();

 

            for (int j = 0; j < count; j++)

            {

                switch (param)

                {

                    case 1:

                        i += 1;

                        break;

                    case 2:

                        i += 2;

                        break;

                    case 3:

                        i += 3;

                        break;

                }

            }

            sw.Stop();

            Response.Write("采用switch判断执行" + count.ToString() + "次消耗的时间是: " + sw.ElapsedMilliseconds.ToString() + "毫秒");

            return i;

        }

来看看俺地测试结果,比较来看性能上还是有些差距地,建议以后还是多用switch判断吧。

 

 

三分支判断

六分支判断

九分支判断

判断次数

if

switch

if

switch

if

switch

999999

6毫秒

5毫秒

6毫秒

5毫秒

6毫秒

5毫秒

9999999

62毫秒

54毫秒

67毫秒

54毫秒

65毫秒

57毫秒

99999999

637毫秒

558毫秒

682毫秒

548毫秒

713毫秒

569毫秒

999999999

6391毫秒

5534毫秒

6833毫秒

5539毫秒

6685毫秒

5542毫秒

 

if 语句和switch语句的异同 1.if 语句可以进行大小范围的变化。 2.if 语句可以对浮点数进行判断。 3.switch语句只能进行相等与否的判断。 4.switch语句只能进行整数的判断。 5.switch语句进行整数的判断时,case标签只能是常量。 有的例子可以用 if 语句又可以用 switch 语句,两个方法都可以实现,在实际开发过程中,具体用哪种方法,根据实际情况而定,不要因为 switch 效率高就用它,也不要因为 if 语句我们经常用它而用它,具体的问题具体分析,使用最合适的语句,从而才能写出高质量的代码。 ... 阅读详情

相关推荐

【学习总结】飞跨电容三电平boost拓扑发波分析与matlab仿真

正常工作时,飞跨电容的电压大约控制在输出电压的一半,降低了开关器件的耐受电压。

晞子的技术札记 1万+

【C进阶】有了"链表"还用"数组"干嘛?被问懵了......

1、聊一聊 今天跟大家分享的是迈克的<Beat It>,这是一首摇滚歌曲,听起来有点亢奋,不过其主题却是劝大家"少打架、多读书"。 本文主要跟大家...

最后一个bug的博客 432

从ABS到EBS再到AEBS:商用车制动安全系统的“三代同堂”与技术演进史

本文详细解析了商用车制动安全系统从ABS到EBS再到AEBS的技术演进历程。通过对比三代系统的性能差异和应用效果,揭示了电子控制单元(ECU)在提升制动精度和安全性的核心作用,并展望了智能制动技术的未来发展趋势。

weixin_42651748的博客 330

东方博宜 1118 - 既生瑜,何生亮! 答案

东方博宜 1118 - 既生瑜,何生亮! 答案

mayuteng1的博客 1269

均值场博弈_平均场博弈(mean field game)

The New Big Fish Called Mean-Field Game Theory原文链接http://www.science4all.org/article/mean-field-games/​www.science4all.org主要内容在经典博弈论中,它对附近其他鱼类的行为做出反应。这是非常复杂的,因为不同的鱼类之间会有大量的相互作用。这意味着经典博弈论对应于一长串高度耦合的方程。...

weixin_34773479的博客 3682

OpenCV机械臂手眼标定

这篇文章总结了手眼标定的原理,利用OpenCV自带的函数套用参数即可完成眼在手上和眼在手外两种标定。

Q先森的博客 6593

【基础】既生瑜,何生亮!c++

【代码】【基础】既生瑜,何生亮!c++

fusca123的博客 491

数字电路基础(CMOS电路、低功耗方法)

文章目录一、CMOS器件1.1.CMOS反相器1.2. CMOS与非门1.3.CMOS或非门1.4 CMOS与门和CMOS或门二、CMOS电路参数——功耗 一、CMOS器件 1.1.CMOS反相器 CMOS反相器实现非门功能,由一个PMOS管和一个NMOS管组成,其逻辑电路图如下: 其真值表如下: In PMOS NMOS Out 0 √ 导通 ×关闭 1 1 ×关闭 √...

Mr.翟的博客 1万+

1118: 【基础】既生瑜,何生亮!

某数的平方是7位数,且这7个数字不相同,如1267^2=1605289。编写程序,输入x,y(1000≤x≤y≤9999)在x~y的范围内找出所有符合条件的数并打印出来。若干行,每行一个符合条件的数。

A246827363的博客 2661

2020计算机专业保研夏令营面经:中科院计算所网数机试题目

计算所网络数据科学与技术重点实验室的第一阶段是机试。机试不限程序语言,要求提交源代码。

乔卿的博客 2957

YOLOv12涨点改进| Kimi团队 2026 |独家创新首发、注意力改进篇|爆火AttnRes残差自注意力模块,含多种创新改进,借助残差思想,缓解细节信息在传播过程中被稀释,促进YOLOv12涨点

🔥本文提出AttnRes残差自注意力模块改进YOLOv12模型,通过深度维度的注意力加权机制替代传统固定残差累加方式。该模块能自适应选择更有价值的历史层特征进行聚合,缓解浅层信息在深层传播中被稀释的问题,提升小目标和复杂场景的检测能力。文章详细介绍了模块结构、原理及优势,并提供了完整的代码实现和配置方法,包括三种改进方案:yolov12n_AttnRes.yaml、yolov12n_AttnRes-2.yaml和yolov12n_A2C2f_AttnRes2D.yaml。

Ai缝合怪、助力小伙伴高效发论文 183

C++之内联:愿以空间换时间

愿以空间换时间

weixin_53472920的博客 1448

十四种逻辑器件综合对比——《器件手册--逻辑器件》

逻辑器件是数字电路中最基本的逻辑单元,用于实现基本的逻辑运算,如与、或、非、异或等。逻辑门根据输入信号的组合产生相应的输出信号。与门:只有当所有输入信号都为高电平时,输出才为高电平。或门:只要有一个输入信号为高电平,输出就为高电平。非门:输出信号与输入信号相反。异或门:当两个输入信号不同时,输出为高电平;相同则输出为低电平。用于对输入信号进行反相操作,即将高电平转换为低电平,低电平转换为高电平。常用于信号的反相处理和逻辑电平的转换。

XU157303764的博客 2030

所谓“既生瑜何生亮”,有了链表还要数组干嘛?

既然数组和链表都是数据存储的一种手段,所谓“既生瑜何生亮”,有了"链表"还用"数组"干嘛?有了这个疑问,小编在此主要跟大家分享一下数组和链表两种内存组织类型的异同,帮助大家正确理解好这两种数据结构并合理应用。 一、数组和链表的简介 1. 数组 数组---就是一些列具有相同类型的数据的集合,这些数据在内存中依次挨着存放,彼此之间没有缝隙。简单来说,就是一种有序、连续且有着相同元素的存储结构。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可

Hsuesh的博客 649

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

(原創) C++/CLI绝非垃圾语言!! (.NET) (C++/CLI) (C/C++)

C++/CLI和C#真的是『既生瑜,何生亮』,既然有了从C++进化而来的C#,为什么Microsoft还要弄个C++/CLI呢?C++/CLI真的是垃圾语言吗?首先谈谈我接触C++/CLI的过程,我的背景是从VFP,VB6,ASP然后到C#,4年前接触C#后,由于C#精简且功能强大,使我认为C#是个完美的程序语言,也应该会是我最后一个程序语言。这学期去修C++,之所以想修C++,并不是想用C++开...

weixin_34297300的博客 1596

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

3103: 【基础】既生瑜,何生亮!

某数的平方是7位数,且这7个数字不相同,如1267^2=1605289。编写程序,输入x,y(1000≤x≤y≤9999)在x~y的范围内找出所有符合条件的数并打印出来。若干行,每行一个符合条件的数。

2401_89382924的博客 471

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

if 语句与switch语句

c语音 if语句与switch语句

qq_73371000的博客 2792

if vs. switch,测试与分析

记得在很久以前,博客园上一个哥们抱怨.net的源码写的太烂,到处都是switch,我当时就做过一个测试,证实了switch比if性能高许多。今天又看见这个话题,呵呵,那就再做个测试吧。 代码: Code usingSystem; usingSystem.Collections.Generic; usingSystem.Diagnostics; usingSystem...

aobannie0463的博客 164

if 和 switch 效率

if…else写法: if(boolean){ } else if(boolean){ } else if(boolean){ } else{ } switch…case写法: switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; } 总结: switch以空间换时间。 1、当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后

qq_40776361的博客 8014

C中使用case语句报出的一个错误

使用C或C++时,switch--case语句报胡这样一个错误: 首先看一下代码: case 4: int len=ListLength(L); printf("当前链表长度是:%d\n",len); break; case 5: TraveList(L); break; 编译器报错如下: 190 9 D:\线性表的链式表示-2.cpp [E

千言万语ROOM 1719

C中if与switch的区别_VS_C_17/11/22

一:两种语句的区别 在讨论if与switch这两种语句的区别时,应该从它们最基础的层面开始。所以我们应该从它们的汇编实现开始探讨。而且应注意到它们都是C中最常用的选择语句,既然是选择语句就还得从它们的实现效率上讨论一番。 先看switch语句: 1,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相的。从而,switc

darkfaker的博客 2489

if和switch的区别和使用场景

if条件结构: if条件结构是根据条件判断之后再做处理: 基本的if条件结构: if(条件){ //语句 } 条件表达式必须是一个返回布尔结果的表达式.语句可以是用{}包含的语句块. if-else条件结构: if(条件){ //语句1 }else{ //语句2 } 条件返回值为true执行语句1,为false执行语句2. switch语句: 多分支选择语句,根据表达式的值,来执行多个操作中的一个. switch(表达式){ case value1: //语句序列1;[b

m0_57367988的博客 3141

if与switch的性能比较

前言 之前学习Java时,遇到了个问题,有点纠结。当if与switch都实现相同的功能时,该改采用哪种方法实现? 我并不懂得如何准确测量两者之间的性能区别,便在OlineJudge上找条该类型的题,来测试两者的性能结果 好,废话不多说,看图 下面是运行结果,前者为if的,后者为switch的 switch的实现 if的实现 虽然两者的结果相比,占用内存相同,运行时间相差较...

weixin_30834019的博客 1483

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 294

模型之外的那套装置:用 AI harness 完成一个三端同步应用

AI harness 指模型之外、让模型能持续产出可交付软件的全部工程装置。本文把它称作"支架"。它由五层构成:输入层规定模型读什么,反馈层规定模型怎么知道自己错了,观测层把界面与设备状态变成可读事实,记忆层让跨会话不失真,边界层规定哪些动作不许模型自行作出。支架的价值在六天里可以直接计量。

Leo的Matrix 167
上一篇: 在ASP.NET 4中如何自动启动Web应用?
下一篇: Asp.NET生成静态页面并分页
erroraspx
博客等级 码龄17年 15粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值