C# 简化优化if/switch 表驱动法】的更多相关文章

表示这个很强大 字典加反射,搞定多window的switch public partial class MainWindow : Window { Dictionary<string, Type> WindowList = new Dictionary<string, Type>(); public MainWindow() { InitializeComponent(); this.AddHandler(Button.ClickEvent, new RoutedEventHand…
数据压倒一切.如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明.编程的核心是数据结构,而不是算法. ——Rob Pike  说明 本文基于这样的认识:数据是易变的,逻辑是稳定的. 本文例举的编程实现多为代码片段,但不影响描述的完整性. 本文例举的编程虽然基于C语言,但其编程思想也适用于其他语言. 此外,本文不涉及语言相关的运行效率讨论. 1 概念提出 所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据.此处的“表”通常为数组,但可视为数…
[经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) ☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471-1-11.html [经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) 首先 开启Administrator 用户 删除其他用户! 1.删除休眠文件 “以管理员身份运行,所有程序→附件→命令提示符”,右击选择“以管理员身份运行”,进入命令提示符后,手工输入“powercfg-h…
上回<大话设计模式C++版——简单工厂模式>中指出了简单工厂模式的缺陷,即违背了开发—封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码,如何改造switch结构,表驱动法就可以粉墨登场了. 表驱动法的介绍见<数据驱动编程之表驱动法>. 1.面向接口编程,先改造抽象接口类IOperation class IOperation { public: IOperation() : m_nNuml(0), m_nNumr(0) {} vi…
一. 概念 判定表是分析和表达多逻辑条件下执行不同操作的情况的工具. 二. 判定表驱动法的应用 判定表的优点: a. 能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏.因此,利用判定表能够设计出完整的测试用例集合. b. 在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作.判定表很适合于处理这类问题 阅读指南”判定表:   1 2 3 4 5 6 7 8 问题 觉得疲倦? Y Y Y Y N N N N 感兴趣吗? Y…
目的:使用表驱动法,替换复杂的if/else和switch/case语句. 说明:JS 等其他语言也都支持的. 表驱动发示例:http://blog.csdn.net/zhouyulu/article/details/6860907 参考资料 1. <代码大全>(第2版)中文版,第18章 表驱动法.…
使用表驱动法,而非繁琐冗长的 if/else, switch case(本身也代表一种代码坏味道),也是替身编程质量的重要手段, 表驱动法是一种编程模式(schema)-- 从表里面查找信息而不使用逻辑语句(if/else, switch/case).事实上,凡是能通过逻辑语句来选择(路由,分发)的事物,都可以通过查表来选择. if (语句A) { 语句B; } else { 语句C; } 上述代码,语句A和语句B便存在着一种映射和对应关系,语句非A和语句C同样存在着一种映射关系. 1. 简单举…
表驱动法 1.相信很多刚从事工作的程序员或一些初级程序员在写代码的时候会出现对一些逻辑判断写成多层if-else嵌套的经历,这种方式在一些简单的层次中运用起来确实可行,但对于一些大型项目逻辑判断比较多的情况下,一下子嵌套十几个甚至更多的if-else就会显得吃力.混乱,降低了可读性.因此今天我要介绍一种代替if-else的方式-----表驱动法. 2.相对比于switch-case这种方式,表驱动法会更有效些:使用表驱动可以提高源程序的可读性,使之更简洁而且更容易修改与扩充. 3.对于表驱动方式…
1.概念 所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据.此处的"表"通常为数组,但可视为数据库的一种体现.根据字典中的部首检字表查找读音未知的汉字就是典型的表驱动法,即以每个字的字形为依据,计算出一个索引值,并映射到对应的页数.相比一页一页地顺序翻字典查字,部首检字法效率极高. 具体到编程方面,在数据不多时可用逻辑判断语句(if-else或switch-case)来获取值:但随着数据的增多,逻辑语句会越来越长,此时表驱动法的优势就开始显现.…
可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物; 3NF:每列都与主键有直接关系,不存在传递依赖; - 不符合第一范式的例子(关系数据库中create不出这样的表): [表]字段1, 字段2(字段2.1, 字段2.2), 字…
需求: 小表数据量20w条左右,大表数据量在4kw条左右,需要根据大表筛选出150w条左右的数据并关联更新小表中5k左右的数据. 性能问题: 对筛选条件中涉及的字段加index后,如下常规的update语句仍耗时半小时左右. UPDATE WMOCDCREPORT.DM_WM_TRADINGALL A SET ( A.RELATIONSHIPNO, A.PACKAGE ) = (SELECT B.RELATIONSHIPNO, CASE ' ' ' ') THEN 'BC' ') THEN 'P…
是什么 一种scheme,用表来做信息存取,代替逻辑语句(if/else) 为什么 简化逻辑语句,避免大量嵌套的 if/else 或者 switch/case 怎么用 三种访问表的方式 直接访问:将源数据作为key 索引访问:构建KV表 阶梯访问:分为连续区间,遍历或者二分查找 例子 // get the full name of weekday // good String[] weekdays = { "Sunday", "Monday", "Tues…
先贴上我优化后的核心代码: select * into #result from ( select p.AchivementCount,isnull(a.ByAttentionCount,0) ByAttentionCount, u.Id,u.FullName,j.Name PostionName,u.ProfessionId,u.Disabled,u.UserName,u.ResearchArea,u.PositionId,u.DepartmentId,u.ORCID,d.Department…
之前在一个比较繁忙的系统抓到的耗时长.消耗CPU多的一条SQL,如下:SELECT * FROM Z_VISU_DATA_ALARM_LOG TWHERE TO_DATE(T.T_TIMESTR, 'MM/DD/YY HH24:MI:SS'))<=(TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd HH24:mi:ss'),'yyyy-mm-dd HH24:mi:ss') - 1800 * 1000 / 1440/60/1000 1.先看看奇葩的表设计:设计表的同学看来很…
1.结构 第一个类 public class GetMethods{...}      类中的变量:                                                                  int codeCount=4 定义获取随机字符串的位数,默认4 int rep = 0 方法体中一个自增的变量      类中的方法,三种获取方式: string GetNum() 获得数字组合的字符串 string GetStr() 获得字母组合的字符串 stri…
一.表结构的优化 1.标准化  标准化是在数据库中组织数据的过程.其中包括,根据设计规则创建表并在这些表间建立关系:通过取消冗余度与不一致相关性,该设计规则可以同时保护数据并提高数据的灵活性.通常数据库标准化是让数据库设计符合某一级别的范式,通常满足第三范式即可.也有第四范式(也称为 Boyce Codd范式,BCNF))与第五范式存在,但是在实际设计中很少考虑.忽视这些规则可能使得数据库的设计不太完美,但这不应影响功能.     标准化的特点: 1) 所有的“对象”都在它自己的table中,没…
转自:https://blog.csdn.net/libaineu2004/article/details/49054261 Windows系统下的TCP参数优化   TCP连接的状态与关闭方式及其对Server与Client的影响 http://www.2cto.com/net/201304/206071.html   通常会采用修改注册表的方式改进Windows的系统参数.下面将为大家介绍Windows系统下的TCP参数优化方式,适用于Windows 2003.Windows XP.Wind…
Mysql 服务器参数类型: 基于参数的作用域: 全局参数:set global autocommit = ON/OFF; 会话参数(会话参数不单独设置则会采用全局参数):set session autocommit = ON/OFF; 注意:全局参数的设定对于已经存在的会话无法生效,会话参数的设定随着会话的销毁而失效全局类的统一配置建议配置在默认配置文件中,否则重启服务会导致配置失效. 寻找配置文件不迷路: mysql --help 寻找配置文件的位置和加载顺序 Default options…
5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优化方案. 5.1.问题场景 问题场景如下: A表为一个汇总表,汇总的是卖家买家最近N天交易汇总信息,即对于每个卖家最近N天,其每个买家共成交了多少单,总金额是多少,假设N取90天,汇总值仅取成交单数. A表的字段有:buyer_id.seller_id.pay_cnt_90day. B表为卖家基本信…
4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首先介绍大表join小表优化.以销售明细表为例来说明大表join小表的场景. 假如供应商进行评级,比如(五星.四星.三星.二星.一星),此时因为人员希望能够分析各供应商星级的每天销售情况及其占比. 开发人员一般会写出如下SQL: select  seller_star, count(order_id)…
MySQL优化概述 MySQL数据库常见的两个瓶颈是:CPU和I/O的瓶颈. CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候. 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上. 我们可以用mpstat, iostat, sar和vmstat来查看系统的性能状态.除了服务器硬件的性能瓶颈,对于MySQL系统本身,我们可以使用工具来优化数据库的性能. MySQL优化方案 Mysql的优化,大体可以分为三部分:索…
mysql的表test中有20105119行数据.建立索引:data_status,place_cargo_status 场景1: SELECT id, resource_id, resource_type, ... F_OMCS_LINK_GET_DAY_BY_WORKDAY(,cargo_arrive_time), load_zone_code, cargo_send_batch, F_OMCS_LINK_GET_DAY_BY_WORKDAY(,cargo_arrive_time), car…
对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些.如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多. 当然,你也需要留够足够的扩展空间,不然,你日后来干这个事,你会死的很难看,参看Slashdot的例子(2009年1…
数据类型及字节数参考http://www.cnblogs.com/qlqwjy/p/8590639.html -------------------------表的优化:----------------------- 1: 定长与变长分离 如 id int, 占4个字节, char(4) 占4个字符长度,也是定长, time 即每一单元值占的字节是固定的. 核心且常用字段,宜建成定长,放在一张表. 而varchar, text,blob,这种变长字段,适合单放一张表, 用主键与核心表关联起来.…
商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> <div id="tabbar-div"> <p> <span class="tab-front" >通用信息</span> <span class="tab-back" >商品描述<…
概述 在写SQL的时候,有时候涉及到的不仅只有一个表,这个时候,就需要表连接了.Oracle优化器处理SQL语句时,根据SQL语句,确定表的连接顺序(谁是驱动表,谁是被驱动表及 哪个表先和哪个表做链接).连接方法(下文有详细介绍)及访问单表的方法(是否走索引,及走哪个索引). 类型 表连接的类型分为两种:内连接和外连接.表连接的类型不同,得到的结果也不相同.不同的SQL语句使用不同的表连接.演示表连接我们用两个表t1和t2 .建表语句及数据如下: -- 建表语句 )); ),col3 )); -…
1. 对返回的行无任何限定条件,即没有where 子句 2. 未对数据表与任何索引主列相对应的行限定条件 例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用这个索引,因为State不是索引的主列. 3. 对索引的主列有限定条件,但是在条件表达式里使用以下表达式则会使索引失效,造成全表扫描: (1)where子句中对字段进行函数.表达式操作,这将导致引擎放弃使用索引而进行全表扫描, Demo: where   upper(city)='TokYo' 或…
更多内容:https://www.toutiao.com/i6599796228886626829/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1542253804&app=news_article&utm_source=weixin&iid=50908871866&utm_medium=toutiao_android&group_id=6599796…
一.设计问题? 1.主键是用自增还是UUID ? Innodb 中的主键是聚簇索引. 如果主键是自增的,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页.如果不是自增主键,那么可能会在中间插入,就会引发页的分裂,产生很多表碎片!UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的形式.由以下几部分的组合:当前…
1. 创建表 CREATE TABLE IF NOT EXISTS `article` ( `id` BIGINT(10) NOT NULL AUTO_INCREMENT, `author_id` INT(10) NOT NULL, `category_id` INT(10) NOT NULL, `views` INT(10) NOT NULL, `comments` INT(10) NOT NULL, `title` VARCHAR(10) COLLATE utf8_unicode_ci NO…