用表驱动消除冗余代码

Profinet 冗余 I/O 功能组态 PROFINET 下冗余 DI,AI,AO,DO 组态均非常相似,支持冗余 I/O 的模块见附录中的列表,以 组态冗余 DI 为例,介绍冗余 I/O 的冗余组态组态过程。在 RROFINET IO 系统中配置 I/O 冗余,需要在端子模块相邻的位置插入同型号的 I/O 模块. 端子模块将两个负责 I/O 信号处理的连接在一起。需要注意冗余 I/O 的端子模块与普通的定货号不同,而且冗余的端子模块不能跨越两个承载 模块,它的实物如下图所示,将冗余模块中的其中一个模块拆下, 监视冗余状态,如图 2-8 所示。 阅读详情

表驱动法最常用的一种场景是用其替代if和case语句,使用查表的方式实现代码逻辑,其可以以使代码更为简单明了,同时可以获得更优的执行效率。但其还有一种运用场景:可以消除冗余代码,使得代码更灵活,方便应对将来需求的变化。

假设下面一段代码需要初始化一些ICON图标:

	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON1)));
	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON2)));
	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON3)));

我们可以忽略这些代码的实际含义,而仅仅只关注代码的逻辑结构。可以发现,每一行代码中大部分内容都是相同的,即ICON1前面的部分:

	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(
其实这也是冗余代码的一种。如果还需要再初始化第4个ICON时,你可能会采用复制粘贴的方法:把第3行代码复制一份,然后把ICON3改为ICON4:

	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON1)));
	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON2)));
	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON3)));
	m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(ICON4)));
然而,如果ICON的个数越来越多,冗余代码的问题就会越来越明显。可以想象如果有10个ICON时,这段代码会变得更加的臃肿。

在写代码时有一个信号需要注意!如果你经常用到复制粘贴,此时你需要停下来好好思考。一方面这会导致冗余代码;另一方面肯定有更为灵活的方法避免冗余代码。针对上面的这种情况,使用表驱动法就是一个很好的解决方案。

这类冗余代码通常都可以分为两部分,一部分是固定的,一部分是变化。我们可以把变化的部分提取出来,放到数组当中,然后将固定的部分放入循环体内。下面就是采用表驱动法优化后的代码:

	int iconIds[] = {ICON1, ICON2, ICON3, ICON4};
	for(int i = 0; i < sizeof(iconIds)/sizeof(iconIds[0]); i++){
			m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(iconIds[i])));
	}
第1行是变化的部分,用一个数组iconIds对不同的ICON ID进行保存。后面的for循环是固定的部分,对每一个iconIds[i]进行相同的操作。

当需要初始化的ICON个数增加到10个时,仅需要修改数组的初始化部分即可,代码并不会显得臃肿:

	int iconIds[] = {ICON1, ICON2, ICON3, ICON4, ICON5,
 ICON6, ICON7, ICON8, ICON9, ICON10};
	for(int i = 0; i < sizeof(iconIds)/sizeof(iconIds[0]); i++){
			m_ImageList.Add(LoadIcon(hResource, MAKEINTRESOURCE(iconIds[i])));
	}

运用表驱动法的核心思路就是:将代码中容易变化的部分抽取出来,这样当需求变化时所需修改的地方就会相对集中。这样可以提高效率,避免犯错。

另外在使用这个方法时,有几个细节需要注意。

第一、不要直接指定数组中元素的个数。比如这样:

int iconIds[3] = {ICON1, ICON2, ICON3};
上面数组中有3个元素,在数组iconIds定义是在中括号[ ]里填入了3。而当元素个数需要扩大到4个时,就需要改两个地方。第一个地方是将中括号[ ]里的3改成4,第二个地方是在数组初始化列表中添加ICON4 :
int iconIds[4] = {ICON1, ICON2, ICON3, ICON4};
第二、不要直接指定for循环中的循环次数。如果写成这样:

for(int i = 0; i < 3; i++){
当数组元素个数变化时,仍然需要修改两个地方。因此这里使用了C/C++的语法特性,用sizeof(iconIds)/sizeof(iconIds[0])直接计算出了数组元素的个数,而且数组内容变化时这里不需要修改。当然如果是JAVA代码,可以使用iconIds.length来代替。

总之将变化的地方集中在一处,一次需求变更只集中改一个地方。

从数据冗余到数据一致性:数据库设计的权衡与优化 数据库设计中数据冗余与一致性的权衡是核心挑战。本文剖析了数据冗余在电商、医疗等场景引发的存储膨胀、更新异常等问题,以及规范化设计(3NF/BCNF)消除冗余但增加查询开销的矛盾。提出了反规范化策略,如热点数据冗余、宽表设计等性能优化方案,结合事务控制、消息队列等实现强一致或最终一致。最后构建了包含业务场景、访问模式等要素的决策框架,并探讨分布式数据库、AI优化等新技术对设计权衡的影响。通过合理应用规范化与反规范化技术,可在性能与一致性之间找到最佳平衡点。 阅读详情

相关推荐

双MOS冗余驱动技术

功率MOS管在电源系统和电机控制中的单点失效会引发系统性风险。文章分析了MOS管典型故障模式(DS短路、GD/GS短路、GS/DS开路)的影响,提出双管冗余驱动方案可有效应对短路故障但存在开路容错局限。进一步升级的四管冗余方案通过并联MOS实现全方位容错,但增加了系统复杂度。通过对比两类方案的优缺点,文章给出隔离元件选型、控制策略和PCB布局等设计建议。这些冗余驱动结构为工业控制、汽车电子等高可靠性应用提供了实用的技术解决方案。

硬核科技 542

我这样干掉了代码中烦人的 if…else 过多的问题,居然惊动了CTO

转自:博客园 作者:艾瑞克·邵www.cnblogs.com/eric-shao/p/10115577.htm前言if...else 是所有高级编程语言都有的必备功能。但现实中的...

Java和Android架构 1237

70、代码优化中的全局冗余消除与数据流分析

本文深入探讨了代码优化中的全局冗余消除与数据流分析技术,介绍了常量折叠、常量传播、复制传播、强度削弱等基础优化方法,并详细阐述了SSA形式转换、全局值编号、全局公共子表达式消除以及活跃变量分析等高级优化技术的原理与应用。文章还分析了寄存器压力管理与别名处理的重要性,并提供了优化技术的综合应用流程。通过这些技术,可以显著提升程序的执行效率,为高效软件开发提供支持。

peach的博客 158

mybatis入门

使用mybatis的好处: 1. 消除大量的JDBC冗余代码。 2. 性能好 下载mysql的jdbc驱动:https://blog.youkuaiyun.com/yangdan1025/article/details/80591012 新建一个数据库testyl 表students 导入jar包:mysql-connector-java-8.0.15.jar 和 mybatis...

anjl1296的博客 76

YOLOv10整体效率-准确度驱动设计源码剖析:计算冗余是如何被系统性消除的?

YOLOv10解决的是“能不能做”的问题(NMS-free从不可能变成可能),而YOLO26解决的是“做得好不好”的问题(在无NMS基础上进一步优化精度和速度)。根据AxcelerateAI在Jetson Orin NX上的实测数据,编译后的YOLOv10模型延迟从PyTorch的~45ms降至5ms以下。值得注意的是,导出器会自动禁用不支持所需算子的格式(RKNN/NCNN/ExecuTorch/Paddle/IMX)的end2end模式,并存储。,证明了在嵌入式无人机上部署的可行性。

ZDQ58818的博客 138

编译原理实验包:自动划分基本块并执行局部优化(含源码与报告)

一套面向高校编译原理课程的实操型实验资源,核心是基于四元式中间代码实现局部优化。C++源码(中间代码优化.cpp)可直接编译运行,自动识别入口语句、扫描四元式序列、判定基本块边界、完成控制流分析,并支持删除无用产生式和冗余节点。配套两份文档:一份为完整实验报告(.doc格式),涵盖算法设计逻辑、输入输出规范、测试用例构造及结果验证步骤;另一份为技术说明文档(.docx格式),详解基本块划分原理、局部优化触发条件与典型优化效果对比。所有内容围绕编译器前端到后端过渡阶段的关键处理环节展开,适合作为课程实验指导材

ansible6ops的博客 209

代码优化就一个原则-消除冗余

架构,设计,优化,重构,编码。 就一个原则:把重复的东西交给while,且保证重复的有效性。 编程编什么? 就是把重复的事情交给电脑。 无论什么目的,无论才用什么样的手段。 为了运行效率。 为了开发效率。 为了维护的成本。 本质上就按是消除冗余,减少重复的逻辑。 消除冗余,无疑,代码的数量少了。 代码的数量少了,一般是容易理解的。 代码的数量少了,一般执行的效率是高的。 代码的数量少了,一般是重复...

xie__jin__cheng的博客 3271

深入解析STM32定时器中央对齐模式3的双中断机制

本文深入解析了STM32定时器中央对齐模式3的双中断机制。该模式在一个PWM周期内,会在计数器到达ARR(上溢)和0(下溢)时各触发一次更新中断,实现更精细的实时控制。文章详细阐述了其工作原理、配置方法,并指导如何在中断服务函数中通过DIR位区分中断来源,同时探讨了其在电机控制、数字电源等场景下的应用优势与CPU负载挑战。

weixin_29164185的博客 492

MySQL --- 多表查询 & 驱动表

指从多张表中查询数据,就是从多张表当中进行查询单表查询的SQL语句:select 字段列表 from 表名;那么要执行多表查询,只需要使用逗号分隔多张表即可,如: select 字段列表 from 表1, 表2;-- 多表查询:直接在from之后跟上多张表就可以了,多张表之间使用逗号分隔可以看到,在多表查询的结果当中,每个员工都展示了5次,将每个员工分别和五个部门进行了一次匹配, 也就是将17个员工和5个部门挨个组合了一次,就是17 * 5 = 85。

weixin_53622554的博客 1万+

基于EKF的UWB-IMU融合定位系统在农业机器人中的抗干扰优化与Matlab仿真

本文探讨了基于扩展卡尔曼滤波(EKF)的UWB-IMU传感器融合定位系统在农业机器人中的应用。通过Matlab仿真验证,该系统有效解决了农业环境中UWB信号遮挡和IMU累积误差问题,实现了厘米级高精度定位,显著提升了机器人在复杂场景下的抗干扰能力和导航可靠性。

numpy6sculptor的博客 622

【算法实战】Keystone变换:从原理到MATLAB实现的距离走动校正

本文深入解析Keystone变换在雷达信号处理中的距离走动校正应用,从原理到MATLAB实现全面讲解。通过三种实现方法(DFT+IFFT、Sinc插值、Chirp-Z变换)的对比分析,结合实战案例展示如何有效解决高速目标导致的距离单元跨越问题,提升多普勒频谱聚焦质量。

weixin_29055699的博客 290

AI编程如何消除冗余生成

本文探讨了AI编程助手生成冗余代码的问题及应对策略。AI由于概率生成机制、上下文局限性和训练数据偏见,常重复生成已有代码逻辑,增加维护成本。作者提出五大解决方案:1)结构化提示词管理;2)建立可检索的代码模式库;3)分阶段生成协议;4)自动化冗余检测流程;5)领域适配微调。强调开发者需从代码生成转向代码策展,培养精确约束能力。未来高效开发将取决于预防冗余代码的能力,这是实现真正AI协作编程的关键突破点。(149字)

印俊 的专栏 735

手把手教你配置RK3588的FFmpeg+RKmpp:从解码到RGA转换的完整避坑指南

本文详细介绍了在RK3588平台上配置FFmpeg+RKmpp进行硬件解码和RGA图像处理的完整流程,包括环境准备、DRM Prime解码输出实战、RGA硬件加速转换技巧以及全链路性能调优。通过具体代码示例和问题排查指南,帮助开发者高效实现视频处理流水线,显著提升性能并降低CPU占用率。

weixin_28366475的博客 473

C++代码冗余消除:从静态分析到动态重构实战

代码冗余是软件开发中常见的技术债务问题,尤其在C++这类系统级语言中,冗余代码会显著降低项目的可维护性和扩展性。通过静态分析工具如Clang-Tidy和Cppcheck,开发者可以精准定位重复代码块和跨文件冗余。在重构阶段,模板元编程和Lambda表达式等技术能有效消除类型冗余和重复逻辑。设计模式如策略模式的合理运用,可以替代复杂的条件分支结构。现代C++特性如constexpr和std::variant进一步提供了编译期优化和类型安全的冗余消除方案。这些技术在金融系统、游戏开发等高性能场景中尤为重要,既能

weixin_34252686的博客 302

永磁同步电机无传感器控制:HFI与ESMO技术详解

高频注入(HFI)和增强型滑模观测器(ESMO)是现代永磁同步电机(PMSM)无传感器控制的核心技术。HFI通过注入高频信号利用电机凸极效应获取转子位置,而ESMO则通过改进传统滑模观测器,有效抑制抖振并提升动态响应。这两种技术的结合特别适用于零低速区域的位置估计,在工业伺服、电动汽车等领域有广泛应用。方波高频注入作为实现方案之一,具有计算量小、实现简单的特点,配合自适应滤波等信号处理技术,可以在保证精度的同时降低系统成本。

weixin_29183637的博客 352

Linux性能调优之CPU时间分布(亲和性、带宽、权重)配置

带宽权重亲和性进程级别Cgroup-v2服务级别systyemd我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼·黑塞《德米安》

山河已无恙 1711

表驱动方法编程

表驱动方法编程(Table-Driven Methods)是一种编程模式,适用场景:消除代码中频繁的if else或switch case的逻辑结构代码,使代码更加直白. 扩展链接:if else或switch case的逻辑结构 用例分析 假设让你实现一个返回每个月天数的函数(为简单起见不考虑闰年)。 public static int getDayByMonth(int mon...

weixin_33743661的博客 978

yolov26改进 | 融合改进篇 | 基于 MobileNetV4 和双向特征金字塔网络BiFPN的融合改进(全网独家首发)

本文介绍BiFPN与MobileNetV4融合改进的YOLOv26。许多模块单独使用能够涨点,但直接叠加后可能因功能重复、通道不匹配、尺度冲突而掉点,因此融合前必须理解各模块作用。MobileNetV4利用UIB与Mobile MQA构建轻量主干,提升特征提取能力;BiFPN通过可学习权重完成双向多尺度融合,强化大、中、小目标的信息交互。两者优化Backbone与Neck,功能互补、结构冲突较少。本文提供代码、配置、消融对比及Codex修改思路,MobileNetV4也可替换其他主干,便于组合实验与二次创新

Snu77的博客 239

冗余分析(驱动因子)

冗余分析,这个是驱动因子的分析。

qq_45697428的博客 126

用AI科研绘图全新升级!借助谷歌新发布模型Nano Banana pro实测一键绘制机制图与技术路线图,直接告别文字乱码与低画质

之前有同仁反馈,用Nano Banana画科研插图的时候,要么文字部分容易乱码,要么抓不住关键内容,画出来的效果反复修改后,还是达不到理想的效果。终于在Gemini 3发布没几天,万众期待的大香蕉模型也成功升级到了Pro版本,官方名称叫“Gemini 3 Pro Image”,实际上也就是我们说的Nano Banana 2。这次的Nano Banana Pro模型,不仅可以直出4K高清图,还能自定义比例,推理能力和中文文字的稳定性也得到了提升。

智能AI让学术科研更容易 1887

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

突破万亿参数训练瓶颈:verl 3D-HybridEngine如何消除50%内存冗余?

在大语言模型(LLM)分布式训练领域,内存冗余一直是制约模型规模和训练效率的关键瓶颈。当模型参数突破万亿时,传统分布式策略往往导致30%-60%的内存被重复存储的参数和梯度占用。verl项目提出的3D-HybridEngine技术通过创新的三维内存优化架构,在Qwen2-7B数学推理任务中实现了50%内存冗余消除,同时将吞吐量提升40%。本文将从技术原理、实现架构和实际应用三个维度,深入解析这一突...

gitblog_00775的博客 425

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

AI编译器中图级别的优化Pass:常量折叠、死代码消除与公共子表达式消除的实现

图优化Pass的顺序决定最终效果:CF→DCE→CSE的组合每步为下一步创造更多优化机会基于操作语义的结构哈希是CSE正确性的基础——必须包含op_type和所有输入常量折叠需要迭代至不动点:单次折叠可能暴露新的常量子图DCE的正确性依赖精确的输出节点标记——误删输出依赖会导致结果错误Pass流水线应支持自定义编排和参数调整,不同模型的最优Pass组合可能不同。

2301_81410839的博客 5407

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

一个实例用全创建型模式-优化(冗余消除)

创建型模式主要关注如何创建对象,它们通过封装对象的创建过程,使得客户端代码无需关心对象的创建细节,从而降低了系统的复杂度。单例模式(Singleton Pattern)工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern)定义提供一个接口,用于创建一族相关或依赖对象,而无需指定具体类。特点创建一族相关或依赖的对象。

xie__jin__cheng的博客 1153

你还在写冗余代码吗?,掌握这4种编码模式,轻松实现源文件最小化

掌握紧凑源文件的编码技巧,有效减少代码体积。本文介绍4种实用编码模式,适用于前端优化与性能提升场景,帮助开发者消除冗余、提高可读性与执行效率。方法简单易上手,值得收藏。

PixelWander的博客 751

测试驱动开发——让你的代码更简洁

盖房子时,工人师傅砌墙会先用桩子拉上吊线,以吊线为基准,以使砖能够垒的笔直。而测试驱动开发也是如此,先写一个测试,然后研发过程以此为基准,只编写能通过这个测试的功能代码。 测试驱动开发——让你的代码更简洁 顺序颠倒下,先垒砖,再拉吊线看墙面是否笔直,不直的话进行校正。这个过程就像传统的软件开发流程,先写功能代码,然后进行测试,有错误再一点点修改,因此,会严重影响研发效率。 测试驱动开发的

weixin_45228755的博客 459

3步解决Windows驱动冗余难题:DriverStore Explorer全方位优化指南

系统盘空间告急却找不到大文件?设备频繁异常却查不出原因?开机速度越来越慢究竟是谁在拖后腿?这些看似独立的问题,背后可能指向同一个被忽视的系统角落——**DriverStore**。这个位于`C:\Windows\System32\DriverStore`的隐藏目录,如同系统的"驱动仓库",随着设备更新和系统升级不断膨胀,成为影响Windows性能的隐形杀手。本文将通过"诊断-优化-维护"三步走策略

gitblog_00833的博客 480
上一篇: 写日志
下一篇: 性能
林 文
博客等级 码龄18年 14粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值