0 0

有何方法能减少复杂设计带来的性能损失5

系统架构为了很智能,能够根据配置适应不同情况,对请求做了大量的判断处理,及加入一些类似拦截判断的代码,尽管对需要获得的环境数据做了缓存,但是仍然面临每个请求都有几十个if判断及循环和循环体内的判断,这种做法,获得了很强的定制能力,但是经过的程序串多了,判断和干的活多了,性能却慢了。

有没有什么设计模式或思路,能减少性能损失?这些判断有没有办法合并或更高效地处理,而不是原始的if-else等?
2013年9月06日 09:53

5个答案 按时间排序 按投票排序

0 0

1、多线程的设计,一定要避免伪共享,避免cachemiss,还有就看多线程的功底了,例如:线程局部变量(ThreadLocal等
2、数据应该在内存
3、这么多的if else可以用状态模式,系统该多重构
4、编程的功底,多了解了解jmm,在编码中对于变量的使用其实很讲究
5、其他,很多开源框架的思想。。。。

2013年9月06日 15:40
0 0

我的建议,先看CPU的使用,肯定不是说“经过的程序串多了,判断和干的活多了,性能却慢了”,如果判断都是取内存中的数据,和请求中的数据来进行策略判断不会太慢,肯定是有些(某个或某几个)判断如果需要 IO,或读数据库,或运算导致性能下降。

应该找到是何种因素使之变慢了,对之调优。当然,方法上可以一步步屏蔽,例如先都屏蔽判断,一点点的放开,观察性能的情况,找到问题所在后,再有针对性的设计高效实现。

2013年9月06日 13:47
0 0

有些检查是必不可少的,例如是否登录?是否有权限?这个性能优化空间不大,使用缓存或者Session。
可以优化的部分主要是对于参数、参数值以及参数组合的检查;在编码方面:
1,如果参数是通过某种格式的字符串集中传递的,例如Json,则使用字符串正则检查,平均性能会略高于if-else。
2,如果参数是相互独立的,则考虑减少for的次数--可以转换成Map再执行if-else。

设计方面:检查不一定都集中在filter中,分系统、业务、合法性三类将检查分离到各个层
面的代码中。由于成功的调用必然通过了必要的所有的检查,因此性能的优化主要集中的"必要性"上。

2013年9月06日 11:22
0 0

针对这种if-else过多的情况,
首先考虑对大量if分支进行分类,程序进来首先判断分类,进入分类之后再具体的判断if分支,这样无效的if会少很多,甚至分几层:大分类、中分类、小分类,不要把所有的判断分支都堆砌在一起;
另外for循环里面尽量不要写过多if判断,能在外面判断的尽量在for循环外面判断;
然后可以考虑一下策略模式,一旦发现if分支过多的情况,就考虑下策略模式看是否合适。

2013年9月06日 10:10
0 0

业务无关的代码可以抽取出来,每个判断分离出来

2013年9月06日 10:08

相关推荐

    为性能而设计——JAVA

    然而,如果匹配器的接口设计不佳,如创建新的AwfulRegExpMatcher实例每次匹配,就会造成额外的对象创建和性能损失。 在这种情况下,一个更好的设计可能是让匹配器接受可变的输入源,而不是每次匹配时都需要新的...

    MyCAT性能损失率报告1

    【MyCAT性能损失率报告1】是一份关于MyCAT数据库中间件在实际应用中的性能评估文档,主要关注在特定硬件环境下MyCAT相对于MySQL的性能损失情况。报告详细描述了测试的环境、架构、方法和一系列关键性能指标。 硬件...

    基于场景的性能测试设计

    然而,性能测试的重要性不容忽视,因为它能预防因系统性能问题导致的损失。基于场景的性能测试设计是一种高效且节约成本的策略,它关注于模拟真实用户的行为和操作,从而更准确地评估系统在实际使用环境下的性能。 ...

    行业资料-电子功用-减少循环空气压力损失来减少耗电量的空调装置和方法的说明分析.rar

    标题中的“行业资料-电子功用-减少循环空气压力损失来减少耗电量的空调装置和方法的说明分析”表明,这份文档主要关注的是空调系统中如何通过优化空气循环以降低能耗的技术。空调系统的运行效率和能源消耗是现代建筑...

    电子功用-用于在决策反馈均衡器中减轻反馈回路延迟相关的性能损失的电路及方法

    为了减轻这种延迟相关的性能损失,该文档提出了几种创新的电路设计和算法优化方法。可能包括: 1. **动态延迟调整**:通过实时调整反馈路径的延迟时间,以适应变化的信道条件和系统需求,从而减少性能损失。 2. **...

    五种提高 SQL 性能的方法

    - **维护索引**:定期进行索引的重建和重组,以保持索引的最佳状态,减少碎片化带来的性能损失。 #### 4. 优化 GROUP BY 子句 **描述**:GROUP BY 子句用于将数据分组,以便进行聚合计算。不当的使用会导致性能...

    处理器芯片敏捷设计方法 问题与挑战

    这种设计方法不同于传统的性能导向设计方法,其主要目标是缩短开发周期、降低成本和复杂性,同时不牺牲性能和可靠性。 OOA方法通过面向对象架构设计,可以在一定程度上减少硬件设计的复杂性。它支持设计的模块化,...

    混流式水轮机转轮S_1流面上叶片设计的准三元方法.rar

    通过准三元方法的设计,可以在保证设计精度的前提下,有效地降低计算成本和设计时间,为水电行业带来技术创新和性能提升。学习和掌握准三元设计方法,对于未来水轮机设计的进一步优化和行业的发展,具有重要的实践...

    粘性对离心泵性能的换算方法的探索.zip

    这对于离心泵的设计、选型和运行具有重要意义,有助于优化泵的效率,减少能源消耗,并在实际工况下提供更稳定的性能。 总的来说,本研究揭示了粘性对离心泵性能的显著影响,同时也探讨了不同工业标准下的换算方法。...

    消防性能化设计简介.pdf

    总的来说,消防性能化设计是现代消防安全的重要组成部分,它通过科学的方法和定制化的设计策略,为复杂建筑提供了更灵活、更安全的防火解决方案。然而,全面推广和有效应用这一方法,还需要克服一系列技术和管理上的...

    水头损失计算软件

    使用这样的软件可以显著提高工程师的工作效率,减少手动计算的错误,并且允许快速比较不同设计方案下的水头损失,从而优化水利系统的性能。用户还可以利用Excel的图表功能,可视化数据,更好地理解和解释结果。 总...

    行业资料-电子功用-减少泄漏功率和提高电路性能的电路配置和方法的说明分析.rar

    这份“行业资料-电子功用-减少泄漏功率和提高电路性能的电路配置和方法的说明分析”正是针对这一主题展开深入讨论的文献。尽管没有具体的标签信息,但从文件名我们可以推测,内容可能涵盖了一些实用的电路配置和方法...

    《复杂模具设计技巧》.pptx

    由于模具在使用过程中,其安全性能直接关系到生产人员的安全以及生产效率,因此在设计之初,就要考虑注塑过程中的匹配性,确保水电油系统的接头设计既方便接插,又能有效地保护各个部件,以避免在使用过程中造成损坏...

    Java高性能系统常见设计与优化.ppt

    如果需要XML消息,可以考虑使用高效的XML处理库来减少性能损失。 总的来说,构建Java高性能系统需要从多个层面进行综合优化,包括JVM配置、代码编写、数据库设计、通信机制和资源管理等方面,以确保系统在高并发和...

    离心泵叶轮设计参数对性能的影响.rar

    尖锐的前缘有利于减小流动阻力,而平滑的后缘有助于减少尾流损失,提高泵的效率。 6. 流道设计:叶轮内部的流道形状和宽度会影响液体的流动状态。合理的流道设计可以使液体在叶轮中平滑流动,减少湍流,降低水力...

    性能优化的方法和技巧

    1. **缓存优化**:优化指令缓存(I-cache)和数据缓存(D-cache),减少缓存未命中导致的性能损失。 2. **代码执行顺序调整**:通过调整代码的执行顺序,减少分支预测错误的概率,提高指令流水线效率。 3. **编译器优化...

    使用Altium+Designer进行高性能PCB设计

    本文将探讨使用Altium Designer进行高性能PCB设计时所需掌握的基本概念、设计流程和常见问题的处理方法。 ### 高性能PCB设计的基本概念 高性能PCB设计是指在高速、高密度电路设计中,确保信号完整性(Signal ...

    使用Altium_Designer进行高性能PCB设计.pdf

    通过以上的讨论,我们可以看出高性能PCB设计是一个包含多个步骤和环节的复杂过程。设计者需要具备广泛的知识,包括信号完整性分析、电源设计、电磁兼容性设计、电路仿真等。Altium Designer作为强大的EDA工具,为...

    发动机缸盖的CFD-CAD设计方法.pdf

    4. 冷却水腔优化设计:结合流动模拟和有限元分析,对冷却水腔进行优化设计,提高冷却效率,减少能量损失。 四、CFD-CAD设计方法的应用 应用CFD-CAD设计方法的目的是为了在实际工程设计中建立一种能够准确模拟...

    MySQL性能调优与架构设计 - 简朝阳.rar_MySQL性能调优与架构设计简朝阳

    3. 锁机制:理解行锁、页锁、表锁等不同锁级别,以及MVCC(多版本并发控制)在事务处理中的作用,有助于减少锁冲突,提高并发性能。 二、MySQL架构设计 1. 主从复制:通过设置主从复制,可以实现数据备份、负载...

Global site tag (gtag.js) - Google Analytics