首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)

过长函数(Long Method) 用到的重构方法 : Extract Method(提炼函数), Replace Temp with Query(以查询取代临时变量), Introduce Parameter..., 并以代码的用途命名; -- 关键 : 函数长度不是关键, 关键在于 函数 是 "做什么", 和 "如何做"; 常用分解方法 : Extract Method(提炼函数) 适用于 99% 的过长函数情况...: 使用 Introduce Parameter Object(引入参数对象) 和 Preserve Whole Object(保持对象完整) 方法 可以将过长的参数列变得简洁一些; -- 杀手锏 :...如果使用了上面 消除临时变量和过长参数的方法之后, 还存在很多 参数 和 临时变量, 此时就可以使用 Replace Method with Method Object(以函数对象取代函数方法) ;..., 也要将其提炼到函数中; -- 条件表达式 : 当 if else 语句, 或者 while 语句的条件表达式过长的时候, 可以使用Decompose Conditional(分解条件表达式) 方法,

59610
您找到你想要的搜索结果了吗?
是的
没有找到

list过长导致CPU消耗过高的问题分析

如果其中某一个回调函数执行时间过长,就会长时间占用锁,造成其他的link->doit回调函数block住更长的时间,那么锁的消耗也会更高。...再结合其他的代码逻辑可以发现,__tcf_chain_get函数就刚好在某一个回调函数的路径上。...计算热点代码的路径 ffffffff8161ab40+1d= ffffffff8161ab5d 所以执行addr2line -e /usr/lib/debug/vmlinux-4.19 -a 0xffffffff8161ab5d...index结构在tcf_chain结构体中偏移0x20,为什么反汇编的代码在0x18上?...list的地址-0x8,index的地址是在chain+0x20,那么index的地址相对于list的地址就是+0x18,计算chain的过程都被编译器优化掉了,只需要使用list的地址+0x18即可完成代码逻辑中的遍历过程

1.7K31

Roslyn 使用 WriteLinesToFile 解决参数过长无法传入

通过阅读本文,大家可以学会怎么写出一些神奇的代码。 任务的背景是,在编译的过程,暗中修改一些代码,而且让开发者发现不了。 最简单的方法就是修改编译流程,修改编译流程是相对比较复杂的。...我很负责和大家说,会的,如果现在不修改代码直接调用就会出现读取到的文件可能是空的 还记得 DependsOnTargets 这个属性?...通过这个属性可以指定一个 Target 在什么时候运行,在运行辅助程序的代码就需要依赖上面的代码运行。...严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB3491 未能向文件“obj\Debug\netcoreapp2.0\lindexi\Items.txt”写入命令行。...测试项目请点击 Roslyn 使用 WriteLinesToFile 解决参数过长无法传入 1.0-CSDN下载 参见: 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) -

79030

Roslyn 使用 WriteLinesToFile 解决参数过长无法传入

通过阅读本文,大家可以学会怎么写出一些神奇的代码。 任务的背景是,在编译的过程,暗中修改一些代码,而且让开发者发现不了。 最简单的方法就是修改编译流程,修改编译流程是相对比较复杂的。...我很负责和大家说,会的,如果现在不修改代码直接调用就会出现读取到的文件可能是空的 还记得 DependsOnTargets 这个属性?...通过这个属性可以指定一个 Target 在什么时候运行,在运行辅助程序的代码就需要依赖上面的代码运行。...严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB3491 未能向文件“obj\Debug\netcoreapp2.0\lindexi\Items.txt”写入命令行。...测试项目请点击 Roslyn 使用 WriteLinesToFile 解决参数过长无法传入 1.0-CSDN下载 参见: 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) -

63720
领券